Je vais vous présenter comment créer un environnement Rail 6 avec Docker. Webpack a été introduit à partir de Rails6, et la procédure est un peu différente de Rails5, j'ai donc pris cela en considération.
Page officielle de Docker Quickstart: Compose and Rails
Docker3 Rails6.0.3 Ruby2.7.1 DB:PostgeSQL
Cette fois, nous allons créer l'environnement dans un dossier nommé "myapp". Si vous souhaitez modifier le nom, veuillez modifier "myapp" en conséquence.
La structure de fichiers à créer à partir de maintenant est la suivante.
organisation des fichiers
myapp
--Dockerfile
--Gemfile
--Gemfile.lock
--entrypoint.sh
--docker-compose.yml
Commencez par créer un dossier.
Terminal
$ mkdir myapp
$ cd myapp
1.1 Dockerfile
Terminal
$ touch Dockerfile
Dockerfile
FROM ruby:2.7.1
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
##nodejs et yarn sont requis lors de l'installation de webpack
#Installer l'outil de gestion des packages de fils
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
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 && apt-get install -y yarn
# Node.installer js
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
apt-get install nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
1.2 Gemfile
Terminal
$ touch Gemfile
Gemfile
source 'https://rubygems.org'
gem 'rails', '~>6'
1.3 Gemfile.lock
Terminal
$ touch Gemfile.lock
Rien n'est répertorié ici.
1.4 entrypoint.sh
Terminal
$ touch entrypoint.sh
entrypoint.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
1.5 docker-compose.yml
Terminal
$ touch docker-compose.yml
docker-compose.yml
version: '3'
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
#######ajouter à#########################
environment:
POSTGRES_HOST_AUTH_METHOD: 'trust'
###################################
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
2.1 rails new
Terminal
$ docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle
À propos des options de commande
--force
: écraser même si le fichier existe
--no-deps
: ne démarre pas le service lié
--database = postgresql
: DB spécifie PostgreSQL
--skip-bundle
: ignorez l'installation du bundle (après avoir créé l'application)
2.2 docker-compose build Maintenant qu'un nouveau Gemfile a été créé, utilisez la commande suivante pour regrouper l'installation.
Terminal
$ docker-compose build
config/database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
#####ajouter à#####
host: db
username: postgres
passowrd:
#############
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
username: myapp
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
Terminal
$ docker-compose up
C'est OK si le conteneur démarre et se connecte au serveur. Je n'ai pas encore créé de base de données, donc j'obtiens l'erreur suivante.
Depuis que j'ai pu me connecter au serveur, j'ai créé une base de données. Après la déconnexion avec Ctrl + C
Terminal
#Arrêtez Docker une fois
$ docker-compose stop
$ docker-compose down
#Création de DB
$ docker-compose run web rake db:create
#Lancez à nouveau Docker
$ docker-compose up
Si vous vous connectez à [http: // localhost: 3000 /](http: // localhost: 3000 /), vous pouvez confirmer qu'il a démarré correctement. La version est Rails6, Ruby2.7.1 tel que défini.
Vous devez utiliser les commandes Docker lors du développement dans Docker.
$ docker-commande compose run web bundle exec rails
Exemple
$ docker-compose run web bundle exec rails g model User
$ docker-compose run web bundle exec rails g controller Homepages index
$ docker-compose run web bundle exec rails g rspec:install
Page officielle de Docker Quickstart: Compose and Rails Étapes de création d'un environnement Ruby on Rails avec Docker [compatible Rails 6] J'étais accro à la création d'un environnement de développement Rails 6 avec Docker L'image Docker Postgres a changé et ne peut plus être démarrée [Rails] ActiveRecord::NoDatabaseError [Docker]
Recommended Posts