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
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!