Blog Rubynetti

Guida per configurare una nuova app rails tramite docker

Creare la directory dell'applicazione

Copiare i template di Docker all'interno della directory del progetto

 a. (Dockerfile)

FROM ruby:2.5.3

RUN apt-get update -qq && \ apt-get install -y build-essential libpq-dev apt-transport-https

RUN curl -sL https://deb.nodesource.com/setup\_10.x | bash - && \ apt-get install -y nodejs RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt-get update -qq && \ apt-get install -y yarn

WORKDIR /web

RUN useradd -u 1000 -Um rails && \ chown -R rails:rails /web USER rails

  b. (docker-compose.yml)

version: "3.2"

services: web: build: . environment: - WEBPACKER_DEV_SERVER_HOST=webpacker command: ["rails", "server", "-b", "0.0.0.0"] ports: - 3000:3000 volumes: - .:/web - gem_bundle:/usr/local/bundle

Copiati i template procedere da terminale (all'interno della directory del nostro progetto cd myapp/) eseguendo

~/myapp> docker-compose build

Al termine dell'installazione entrare nel container

~/myapp> docker-compose run --rm web bash

Installare dall'interno del container rails

:/web$ gem install rails

Uscire dalla directory web del container (cd ..) ed eseguire il comando

:/web$ cd .. :/$ rails new web

Volendo utilizzare mysql al posto di sqlite impostato di default:

Sostituire la gemma sqlite con mysql2 nel Gemfile ed aggiungere al docker-compose.yml

version: "3.2"

services: web: build: . environment: - WEBPACKER_DEV_SERVER_HOST=webpacker command: ["rails", "server", "-b", "0.0.0.0"] ports: - 3000:3000 volumes: - .:/web - gem_bundle:/usr/local/bundle db: image: mysql:5.7.25 environment: - MYSQL_ALLOW_EMPTY_PASSWORD="yes" ports: - 3306:3306 volumes: - db_data:/var/lib/mysql

Configurare quindi il nuovo db in database.yml come segue

default: &default adapter: mysql2 host: db user: root pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000

development: <<: *default database: myapp-dev

Warning: The database defined as "test" will be erased and

re-generated from your development database when you run "rake".

Do not set this db to the same as development or production.

test: <<: *default database: myapp-test

production: <<: *default database: myapp-prod

Procedere all'installazione della nuova gemma

~/myapp> docker-compose run --rm web bundle

Terminata l'installazione della gemma, per creare le immagini del nuovo database, eseguire il comando

~/myapp> docker-compose up -d

Quindi si possono creare i db da dentro il container (docker-compose exec web bash) eseguendo

:/web$ rails db:create

Per installare webpacker:

Aggiungere al Gemfile webpacker

group do ... gem 'webpacker' end

Modificare dunque il docker-compose.yml

version: "3.2"

services: web: build: . environment: - WEBPACKER_DEV_SERVER_HOST=webpacker command: ["rails", "server", "-b", "0.0.0.0"] ports: - 3000:3000 volumes: - .:/web - gem_bundle:/usr/local/bundle db: image: mysql:5.7.25 environment: - MYSQL_ALLOW_EMPTY_PASSWORD="yes" ports: - 3306:3306 volumes: - db_data:/var/lib/mysql

webpacker: depends_on: - web image: myapp_web environment: - WEBPACKER_DEV_SERVER_HOST=0.0.0.0 command: ./bin/webpack-dev-server volumes: - .:/web - gem_bundle:/usr/local/bundle ports: - 3035:3035

Installare quindi la gemma (docker-compose run --rm web bundle o eseguire il bundle da dentro il container)

Installata la gemma procedere con l'installazione di webpacker da dentro il container

:/web$ rails webpacker:install

Ora eseguite docker-compose up e su localhost:3000 avrete la pagina default di rails!

Chi siamo?

Rubynetti è una squadra di designer, sviluppatori e programmatori specializzata in applicazioni web. Il nostro focus è portare valore e automazione nei processi umani e aziendali attraverso l'uso delle tecnologie del web.

Operiamo da più di 20 anni nel settore e siamo specializzati su Vue.js, Nuxt, Rails e React.

Lavoriamo per lo più da Venezia centro storico.

Contatti

Se hai bisogno di una mano per portare avanti o creare dal nulla un progetto digitale siamo a disposizione.