Comme le titre l'indique, Docker sera installé dans l'environnement de développement d'applications Rails et MySQL existant. Il permet également d'exécuter les tests rspec dans Docker. Il y a déjà beaucoup d'articles similaires, mais j'ai rencontré pas mal d'erreurs, je vais donc résumer mon travail. Je vous serais reconnaissant si vous pouviez me faire savoir s'il y a des erreurs.
Si la version Rails est 6 et la version MySQL est 8, cette méthode ne fonctionnera pas.
Créez un nouveau Dockerfile dans le répertoire de projet existant.
organisation des fichiers
test_app#Projet existant
├── Abréviation
├── Dockerfile #Créer
├── docker-compose.yml #Créer
├── Gemfile
├── Gemfile.lock
├── .env #utilisation
├── config
└──database.yml #Changement
Je décrirai le contenu.
Veuillez faire correspondre test_app
ci-dessous à chaque nom d'application.
Dockerfile
FROM ruby:2.6.5
RUN apt-get update \
&& apt-get install -y --no-install-recommends nodejs mariadb-client build-essential \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
WORKDIR /test_app
COPY Gemfile /test_app/Gemfile
COPY Gemfile.lock /test_app/Gemfile.lock
RUN gem install bundler
RUN bundle install
COPY . /test_app
mariadb-client
est mysql-client
, mais soyez prudent car cela a causé une erreur. mysql-client semble être intégré à mariadb-client.RUN mdir
, il sera créé avec WORKDIR
.docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
ports:
- '3306:3306'
environment:
MYSQL_DATABASE: today_code_development
MYSQL_ROOT_PASSWORD: ${DATABASE_DEV_PASSWORD}
MYSQL_USER: ${DATABASE_DEV_USER}
MYSQL_PASSWORD: ${DATABASE_DEV_PASSWORD}
volumes:
- mysql-data:/var/lib/mysql
test-db:
image: mysql:5.7
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
environment:
MYSQL_DATABASE: today_code_test
MYSQL_ROOT_PASSWORD: ${DATABASE_DEV_PASSWORD}
MYSQL_USER: ${DATABASE_DEV_USER}
MYSQL_PASSWORD: ${DATABASE_DEV_PASSWORD}
ports:
- '3307:3306'
web:
build:
context: .
dockerfile: Dockerfile
command: bundle exec rails s -p 3000 -b '0.0.0.0'
tty: true
stdin_open: true
depends_on:
- db
- test-db
ports:
- "3000:3000"
volumes:
- .:/today_code
- bundle:/usr/local/bundle
volumes:
mysql-data:
bundle:
Écrivez seulement les points.
command
définit le code de caractère de la base de données sur utf8. Sans cela, une erreur s'est produite au niveau de db: create
.
--Dans ʻenviroment, le nom d'utilisateur et le mot de passe sont définis. Bien sûr, cela fonctionne même si vous l'écrivez directement, mais ici nous étendons les variables d'environnement. Le fichier docker-compose semble lire le fichier .env par défaut, alors définissez-le dans le fichier .env comme indiqué ci-dessous. Les variables d'environnement définies peuvent être développées avec
$ {}`. Ajoutez le fichier .env au fichier .gitignore afin qu'il ne s'engage pas..env
DATABASE_DEV_USER = 'hoge'
DATABASE_DEV_PASSWORD = 'password'
database.yml
default: &default
adapter: mysql2
encoding: utf8
charset: utf8
pool: 5
port: 3306
development:
<<: *default
database: test_app_development
username: <%= ENV['DATABASE_DEV_USER'] %>
password: <%= ENV['DATABASE_DEV_PASSWORD'] %>
host : db
test:
<<: *default
database: test_app_test
username: <%= ENV['DATABASE_DEV_USER'] %>
password: <%= ENV['DATABASE_DEV_PASSWORD'] %>
host : test-db
production:
<<: *default
database: <%= ENV['DB_NAME'] %>
username: <%= ENV['DB_USERNAME'] %>
password: <%= ENV['DB_PASSWORD'] %>
host: <%= ENV['DB_HOSTNAME'] %>
--username et password sont les mêmes que docker-compose. --Il est configuré pour se connecter au conteneur de base de données créé par l'hôte. ――Veuillez ajuster la production à chaque environnement
Si vous pouvez démarrer docker à la fin, il réussit.
docker-compose build
docker-compose up -d
. -d est une option pour démarrer en arrière-plan.docker-compose run web rails db: create
S'il est affiché sur http: // localhost: 3000 /, il réussit. Tout ce que vous avez à faire est db: migrate ou db: seed et vous avez terminé.
J'ai essayé de créer un environnement de développement de projet Rails existant à l'aide de Docker (Rails + Mysql) Comment exécuter une application Rails existante dans un conteneur Docker + visualisation de conteneur DB avec sequence pro Créer une base de données de test dans l'environnement Rails x Docker Persistez les données Docker! Introduction à la construction de l'environnement à partir de la compréhension du volume de données
Recommended Posts