Es fiel mir schwer, die Umgebung mit Rails6 und MySQL mit Docker aufzubauen, daher werde ich auch im Artikel ein Memorandum hinterlassen.
Als Stolperstein Im Gegensatz zu Rails5 erforderte Rails6 die Einführung von Webpacker, einem Juwelenpaket für die Verwendung von Webpack mit Ruby on Rails, das die moderne Front-End-Entwicklung stark unterstützt.
Erstellen Sie einen Ordner mit einem beliebigen Namen (es muss kein Befehl sein)
mkdir dockerSampleApp
Erstellen Sie eine Datei in dem Ordner, der in 1 erstellt wurde.
Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
entrypoint.sh
Dockerfile
Unabhängig vom Ordnernamen des Projekts kann der Teil von myapp als myapp belassen werden.
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
#Schreiben Sie nichts in diese Datei
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 "$@"
Befehl ausführen
$ docker-compose run web rails new . --force --no-deps --database=mysql --skip-test --webpacker --api
Informationen zu den diesmal verwendeten Optionen
-- --force
Vorhandene Gemfile überschreiben
-- --no-deps
Starten Sie den verknüpften Dienst nicht
-- --database = mysql
Geben Sie MySQL für die Datenbank an
-- --skip-test
Überspringe die Installation von Minitest (da der Test RSpec einführt)
Der Image-Build dient zum Installieren verschiedener abhängiger Bibliotheken und Middleware sowie zum Installieren und Festlegen einer eigenen Anwendung.
Befehl ausführen
$ docker-compose build
Der relevante Teil von database.yml
wurde korrigiert.
Der relevante Teil wurde gemäß den Einstellungen von services
und MYSQL_ROOT_PASSWORD
in docker-compose.yml
korrigiert.
config/database.yml
# ~Kürzung~
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password # ->Korrigieren Sie das Leerzeichen auf Passwort
host: db # ->Von localhost zu db behoben
# ~Kürzung~
Führen Sie den Befehl aus, um eine Datenbank zu erstellen
$ docker-compose run web rails db:create
Führen Sie abschließend den Befehl aus, um den Container zu starten
$ docker-compose up
Es kann einige Zeit dauern, aber es ist in Ordnung, wenn ein solches Protokoll im Terminal fließt
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
Wenn ich auf localhost: 3000
zugreife, wird die Seite sicher angezeigt. Sollte sein! !!
Ich habe es geschafft, eine Umgebung aufzubauen! In Zukunft möchte ich etwas über Infrastruktur wie Docker lernen und mein Verständnis vertiefen!
Ich war sehr hilfreich!
Vielen Dank! !!