J'ai eu du mal à créer l'environnement avec Rails6 et MySQL avec Docker, je vais donc également laisser un mémorandum dans l'article.
Comme une pierre d'achoppement Contrairement à Rails5, Rails6 a nécessité l'introduction de Webpacker, un package de gemmes permettant d'utiliser Webpack avec Ruby on Rails, qui prend fortement en charge le développement frontal moderne.
Créez un dossier avec n'importe quel nom (il n'est pas nécessaire que ce soit une commande)
mkdir dockerSampleApp
Créez un fichier dans le dossier créé en 1.
Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
entrypoint.sh
Dockerfile
Quel que soit le nom du dossier du projet, la partie de myapp peut être laissée en tant que myapp.
Dockerfile
FROM ruby:2.7
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 nodejs yarn \
&& mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yml
docker-compose.yml
version: '3'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- '3306:3306'
command: --default-authentication-plugin=mysql_native_password
volumes:
- mysql-data:/var/lib/mysql
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
stdin_open: true
tty: true
volumes:
mysql-data:
driver: local
Gemfile
Gemfile
source 'https://rubygems.org'
gem 'rails', '~>6'
Gemfile.lock
Gemfile.lock
#N'écrivez rien dans ce fichier
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 "$@"
Exécuter la commande
$ docker-compose run web rails new . --force --no-deps --database=mysql --skip-test --webpacker --api
À propos des options utilisées cette fois
-- --force
Écraser le Gemfile existant
-- --no-deps
Ne démarre pas le service lié
-- --database = mysql
Spécifiez MySQL pour la base de données
-- --skip-test
Ignore l'installation de Minitest (car le test introduira RSpec)
Installer webpacker (outil de gestion de paquet requis pour Rails 6) ――
--api`` Exécutez en mode API car vous ne souhaitez créer que l'API. Cela empêche l'installation de bibliothèques inutiles liées à la vue / l'interface utilisateur.La création d'image consiste à installer diverses bibliothèques et intergiciels dépendants, et à installer et définir votre propre application.
Exécuter la commande
$ docker-compose build
Correction de la partie pertinente de database.yml ''. Correction de la partie concernée selon les paramètres de
services '' et MYSQL_ROOT_PASSWORD '' dans
docker-compose.yml``.
config/database.yml
# ~réduction~
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password # ->Corrigez le vide en mot de passe
host: db # ->Correction de localhost à db
# ~réduction~
Exécutez la commande pour créer une base de données
$ docker-compose run web rails db:create
Enfin exécutez la commande pour démarrer le conteneur
$ docker-compose up
Cela peut prendre un certain temps, mais ce n'est pas grave si un tel journal circule dans le terminal
web_1 | => Booting Puma
web_1 | => Rails 6.0.3.4 application starting in development
web_1 | => Run `rails server --help` for more startup options
web_1 | Puma starting in single mode...
web_1 | * Version 4.3.6 (ruby 2.7.2-p137), codename: Mysterious Traveller
web_1 | * Min threads: 5, max threads: 5
web_1 | * Environment: development
web_1 | * Listening on tcp://0.0.0.0:3000
web_1 | Use Ctrl-C to stop
Lorsque j'accède à `` localhost: 3000 '', la page s'affiche en toute sécurité. Devrait être! !!
J'ai réussi à créer un environnement! À l'avenir, j'aimerais en savoir plus sur les infrastructures telles que Docker et approfondir ma compréhension!
J'ai été très utile!
Merci beaucoup! !!
Recommended Posts