J'ai essayé de créer un environnement Rails6 et Docker, je vais donc le laisser ici en tant que mémorandum. Qiita Ceci est mon premier message, et comme je suis débutant, je pense qu'il y a plusieurs points qui ne peuvent pas être atteints, donc j'apprécierais que vous puissiez signaler des erreurs.
environnement
référence Créer un environnement Rails6 + MySQL avec docker-compose [Construction de l'environnement des rails] Construction de l'environnement avec docker + rails + mysql (même les débutants peuvent terminer en 30 minutes!) [ENTRYPOINT est "toujours exécuter", CMD est "(par défaut) argument"](https://pocketstudio.net/2020/01 / 31 / cmd-et-point d'entrée /)
Elle a été réalisée en référence à cela.
Créez l'environnement et affichez l'écran d'accueil de Rails.
https://hub.docker.com/ Accédez à et installez.
$ mkdir ~/Desktop/docker-tutrial/Rails_app
$ cd ~/Desktop/docker-tutrial/Rails_app
$ code Dockerfile
Ouvrez un terminal, créez un répertoire à n'importe quel endroit et écrivez `` Dockerfile '' comme suit. (J'utilise vsCode.)
$nom de fichier de code
Ensuite, vsCode démarrera et vous pourrez écrire un nouveau fichier. (VsCode doit être installé sur votre PC à l'avance.)
FROM ruby:2.7
RUN apt-get update -qq && apt-get install -y nodejs yarnpkg
RUN ln -s /usr/bin/yarnpkg /usr/bin/yarn
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
# 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"]
source 'https://rubygems.org'
gem 'rails', '~>6'
$ touch Gemfile.lock
Écrivez l'initiale Gemfile '' et le vide
Gemfile.lock ''.
Entrypoint défini comme ENTRYPOINT dans Dockerfile.Décrivez sh.
```shell
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /app/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
version: '3'
services:
db:
image: mysql:8.0
volumes:
- ./tmp/db:/var/lib/mysql
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=1
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/app
ports:
- "3000:3000"
depends_on:
- db
MySQL utilise la version 8.0
En définissant ** MYSQL_ALLOW_EMPTY_PASSWORD **, vous pouvez vous connecter en tant que root même si le mot de passe est vide.
$ docker-compose run web bundle exec rails new . --force --database=mysql
Remplacez le fichier existant par ** --force ** et spécifiez MySQL avec ** --database **. Maintenant que vous disposez de l'ensemble de fichiers Rails habituel, créez-le.
$ docker-compose build
Puisque vous ne pouvez pas vous connecter à la base de données telle quelle Remplacez ** host ** dans ** config / database.yml ** par ** db **.
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
host: db
development:
<<: *default
database: app_development
test:
<<: *default
database: app_test
** db ** est le nom du conteneur.
Une fois cela fait, compilez à nouveau et faites ** docker-compose up **. Si vous accédez à Rails avec ** localhost: 3000 **, vous obtiendrez ** ActiveRecord :: NoDatabaseError **.
Cela se produit car le conteneur Web ne prend pas en charge la ** méthode d'authentification caching_sha2_password ** de mysql 8.0. Suivez les étapes ci-dessous pour passer à l'ancienne méthode d'authentification ** mysql_native_password **.
Tout d'abord, entrez dans le conteneur DB et démarrez bash.
$ docker-compose exec db bash
Puis connectez-vous avec la commande mysql.
# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.18 MySQL Community Server - GPL
...
Vous pouvez voir la liste des utilisateurs et sa méthode d'authentification en envoyant la requête suivante.
mysql> select User,Host,plugin from mysql.user;
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| root | % | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)
Remplacez ** caching_sha2_password ** dans le plugin le plus à droite par ** mysql_native_password **. Utilisez ** ALTER USER ** pour modifier les paramètres utilisateur cible ** root @% **.
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '';
-- Query OK, 0 rows affected (0.02 sec)
Après le changement
mysql> select User,Host,plugin from mysql.user;
+------------------+-----------+-----------------------+
| User | Host | plugin |
+------------------+-----------+-----------------------+
| root | % | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)
Si vous faites ** db: prepare ** et créez une base de données, vous pourrez accéder à l'écran d'accueil de Rails.