Wie der Titel schon sagt, wird Docker in der vorhandenen Entwicklungsumgebung für Rails- und MySQL-Anwendungen installiert. Außerdem können rspec-Tests in Docker ausgeführt werden. Es gibt bereits viele ähnliche Artikel, aber ich habe einige Fehler festgestellt, daher fasse ich zusammen, wie ich gearbeitet habe. Ich würde mich freuen, wenn Sie mich wissen lassen könnten, wenn es Fehler gibt.
Wenn die Rails-Version 6 und die MySQL-Version 8 ist, funktioniert diese Methode nicht.
Erstellen Sie eine neue Docker-Datei im vorhandenen Projektverzeichnis.
Dateiorganisation
test_app#Bestehendes Projekt
├── Abkürzung
├── Dockerfile #Erstellen
├── docker-compose.yml #Erstellen
├── Gemfile
├── Gemfile.lock
├── .env #verwenden
├── config
└──database.yml #Veränderung
Ich werde den Inhalt beschreiben. Bitte ordnen Sie "test_app" unten jedem App-Namen zu.
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
RUN mdir
gibt, wird es mit WORKDIR
erstellt.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:
Schreiben Sie nur die Punkte.
db: create
aufgetreten.$ {}
erweitert werden. Fügen Sie die .env-Datei zur .gitignore-Datei hinzu, damit sie nicht festgeschrieben wird.
--Volumes bleiben Daten erhalten, indem benannte Volumes erstellt werden. Es scheint eine Möglichkeit zu geben, das Verzeichnis zu mounten, aber es scheint, dass das Datenvolumen mehr Vorteile hat..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'] %>
--Benutzername und Passwort sind identisch mit Docker-Compose.
Wenn Sie Docker am Ende starten können, ist dies erfolgreich.
docker-compose up -d
. -d ist eine Option, um im Hintergrund zu beginnen.Wenn es unter http: // localhost: 3000 / angezeigt wird, ist es erfolgreich. Alles was Sie tun müssen ist db: migrate oder db: seed und Sie sind fertig.
Ich habe versucht, eine vorhandene Rails-Projektentwicklungsumgebung mit Docker (Rails + MySQL) zu erstellen. Ausführen einer vorhandenen Rails-App in einem Docker-Container + DB-Container-Visualisierung mit Sequence Pro Erstellen einer Test-DB in der Rails x Docker-Umgebung Docker-Daten beibehalten! Einführung in die Umgebungskonstruktion ab dem Verständnis des Datenvolumens