[RAILS]

mkdir myrailsapp
cd myrailsapp

Dockerfile


FROM ruby:2.5

##Erstellen einer Rails 6 + MySQL-Umgebung mit Docker compose Die offizielle Website von Docker enthält [Tutorial zum Erstellen von Docker für Rails-Anwendungen](https://docs.docker.com/compose/rails/), es gibt jedoch einige Informationen. Früher hat es mit Rails 6 nicht gut funktioniert. Hier erfahren Sie, wie Sie es mit Rails 6 zum Laufen bringen. Da die Grundlagen dem Verfahren des offiziellen Tutorials folgen, werden die Ergänzungen hauptsächlich zu den für Rails 6 vorgenommenen Änderungen hinzugefügt. DB beschreibt, wie MySQL anstelle von Postgres verwendet wird. Vorbereiten des Projektverzeichnisses Vorbereiten der Konfigurationsdatei Knoten und Garn sind für die Installation von Webpack erforderlich
#Installieren Sie das Garnpaket-Verwaltungstool
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
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 && apt-get install -y yarn

RUN apt-get update -qq && apt-get install -y nodejs yarn
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

RUN yarn install --check-files
RUN bundle exec rails webpacker:compile

# 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"]

Für Rails 6 muss Garn zum Ausführen von Webpacker ausgeführt werden. Fügen Sie daher das Verfahren zum Installieren des Garns zur Docker-Datei hinzu. Wenn Sie normalerweise mit "apt-get yarn" mit dem Bild "ruby: 2.5" installieren, wird eine seltsame Version von "0.32 + git" installiert, und später tritt ein Fehler auf. Daher habe ich das Repository gemäß den Anweisungen auf der offiziellen Website des Garns hinzugefügt. Später apt-get install garn.

Referenz: https://qiita.com/shunichi_com/items/4dca141d8b9342c51a04

In der Produktionsumgebung ist es außerdem erforderlich, Webpacker im Voraus zu kompilieren. Daher habe ich das Garnpaket-Update und "webpacker: compile" hinzugefügt.

Ausgeschlossen, da postgres nicht verwendet wird.

Gemfile


source 'https://rubygems.org'
gem 'rails', '~>6'

Geben Sie die Rails 6-Serie in Gemfile an. Diese Gem-Datei wird nach dem Erstellen des Rails-Projekts mit dem Inhalt des Rails-Projekts überschrieben.

touch Gemfile.lock

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 "$@"

Dieser Bereich ist immer noch ein offizielles Beispiel, daher wird die Erklärung weggelassen.

docker-compose.yml


version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: root
    ports:
      - "3306:3306"
    volumes:
      - ./tmp/db:/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

Ändern Sie die Einstellung, um MySQL zu verwenden.

Erstellen eines Rails-Projekts


docker-compose run web rails new . --force --no-deps --database=mysql

Erstellen Sie ein Projekt mit der DB-Einstellung MySQL mit --database = mysql.

docker-compose build

DB-Verbindungseinstellungen

database.yml


development:
  <<: *default
  database: myapp_development
  host: db
  username: root
  password: password

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: myapp_test
  host: db
  username: root
  password: password

Beschrieb die Einstellung so, dass "Entwicklung" und "Test" das von Docker-Compose gestartete MySQL-Image "DB" verwenden.

DB-Erstellung

docker-compose run web rails db:create

Einführung in Webpacker

docker-compose run web rails webpacker:install 

Dieser Schritt ist erforderlich, da Webpacker anstelle von Kettenrädern von Rails 6 verwendet wird.

Bild starten

docker-compose up

Scaffold

docker-compose run web rails g scaffold article title:string body:text published_at:timestamp
docker-compose run web rails db:migrate

Führen Sie bei der Entwicklung mit Docker-Compose Generierungsbefehle einschließlich Gerüst und Migration mit "Docker-Compose Run Web" aus.

docker-compose up

スクリーンショット 2020-09-22 0.07.07.png

Recommended Posts