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 :development 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.