[RUBY] Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials (Rails 6 + PostgreSQL + Webpack)

Einführung

Das neueste Rails-Tutorial (Stand: 8. August 2020) verwendet Rails 6 und Ich möchte mit Docker eine Entwicklungsumgebung erstellen, die dies unterstützt.

Beim Erstellen einer Entwicklungsumgebung für persönlich entwickelte Apps Ich habe Rails 6 eingeführt, weil ich neue Dinge mag ...

Allerdings ... mit der Einführung von Webpack im JavaScript-Modul-Bundler von Rails 6 Die Einführung und Verwaltung von Tools wie Bootstrap und Fontawesome wird sich nicht nur ändern, sondern auch Erstens sind beim Erstellen der Umgebung Schritte erforderlich, die in Rails 5 nicht erforderlich sind: Wir haben die Wände von Rails 6 und Webpack großartig getroffen ...

Da es sehr viel ist, möchte ich mein Wissen und meine Erfahrung durch diesen Versuch organisieren und etablieren.

Außerdem möchte ich das Rails-Tutorial erneut ausführen und mein Lernen vertiefen.

Persönlich entwickelte App mdClip

Zuvor ein Artikel zum Erstellen einer Rails 5-Umgebung mit Docker Erstmalige Erstellung einer Rails-Entwicklungsumgebung mit Docker [NGINX + Rails 5 (puma) + PostgreSQL] --Qiita

Umgebung

Konfigurationsdatei

Bereiten Sie die folgenden 5 Dateien im Arbeitsbereich vor Dockerfile, docker-compose.yml, Gemfile, Gemfile.lock, entrypoint.sh

https://github.com/naokit1030/sample_app_on_docker.git

git clone -b create-docker-files https://github.com/dev-naokit/sample_app_on_docker.git

Dockerfile

--Verwenden Sie "alpine", um das Gewicht des Bildes zu reduzieren

--nodejs und Garn sind erforderlich, um Webpack zu installieren

Die Option -j4 von --bundle install beschleunigt die Bundle-Installation

FROM ruby:2.6.3-alpine

ENV LANG=ja_JP.UTF-8
ENV TZ=Asia/Tokyo
ENV ROOT=/myapp \
    GEM_HOME=/bundle \
    BUNDLE_PATH=$GEM_HOME
ENV BUNDLE_BIN=$BUNDLE_PATH/bin
ENV PATH /app/bin:$BUNDLE_BIN:$PATH


WORKDIR $ROOT

RUN apk update && \
    apk upgrade && \
    apk add --no-cache \
        gcc \
        g++ \
        libc-dev \
        libxml2-dev \
        linux-headers \
        make \
        nodejs \
        postgresql \
        postgresql-dev \
        tzdata \
        yarn && \
    apk add --virtual build-packs --no-cache \
        build-base \
        curl-dev

COPY Gemfile $ROOT
COPY Gemfile.lock $ROOT

RUN bundle install -j4
#Löschen Sie nicht benötigte Dateien
RUN rm -rf /usr/local/bundle/cache/* /usr/local/share/.cache/* /var/cache/* /tmp/* && \
apk del build-packs

COPY . $ROOT

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["sh", "/usr/bin/entrypoint.sh"]
EXPOSE 3000

docker-compose.yml

version: '3'

services:
  db:
    image: postgres:11.0-alpine
    volumes:
      - postgres:/var/lib/postgresql/data:cached
    environment:
      - TZ=Asia/Tokyo
    ports:
      - '5432:5432'
    environment:
      PGDATA: /var/lib/postgresql/data/pgdata
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_INITDB_ARGS: '--encoding=UTF-8 --locale=ja_JP.UTF-8'
      TZ: Asia/Tokyo
  app:
    build: .
    command: ash -c "rm -f tmp/pids/server.pid && ./bin/rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp:cached
      - rails_cache:/myapp/tmp/cache
      - bundle:/bundle:cached
    tmpfs:
      - /tmp
    tty: true
    stdin_open: true
    ports:
      - "3000:3000"
    environment:
      RAILS_ENV: development
      NODE_ENV: development
      DATABASE_HOST: db
      DATABASE_PORT: 5432
      DATABASE_USER: postgres
      DATABASE_PASSWORD: password
      WEBPACKER_DEV_SERVER_HOST: webpacker
    depends_on:
      - db
      - webpacker
    links:
      - db
      - webpacker
  webpacker:
    build: .
    command: ./bin/webpack-dev-server
    volumes:
      - .:/myapp:cached
    environment:
      RAILS_ENV: development
      NODE_ENV: development
      WEBPACKER_DEV_SERVER_HOST: 0.0.0.0
    tty: false
    stdin_open: false
    ports:
      - '3035:3035'

volumes:
  rails_cache:
  postgres:
  bundle:

Gemfile

source 'https://rubygems.org'
gem 'rails',      '6.0.3'

Gemfile.lock Nur der Befehl touch ist als leere Datei in Ordnung

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

Verfahren

Installieren Sie Rails 6.0.3.

docker-compose run app rails new . --force --no-deps --database=postgresql --skip-bundle

Gemfile Geändert wie folgt gemäß dem Rails-Tutorial (Es wurde geändert, um PostgreSQL auch in Entwicklungs- und Testumgebungen zu verwenden.)

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

gem 'rails',      '6.0.3'
gem 'puma',       '4.3.4'
gem 'pg',         '1.1.4'
gem 'sass-rails', '5.1.0'
gem 'webpacker',  '4.0.7'
gem 'turbolinks', '5.2.0'
gem 'jbuilder',   '2.9.1'
gem 'bootsnap',   '1.4.5', require: false

group :development, :test do
  gem 'byebug',  '11.0.1', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  gem 'web-console',           '4.0.1'
  gem 'listen',                '3.1.5'
  gem 'spring',                '2.1.0'
  gem 'spring-watcher-listen', '2.0.1'
end

group :test do
  gem 'capybara',                 '3.28.0'
  gem 'selenium-webdriver',       '3.142.4'
  gem 'webdrivers',               '4.1.2'
  gem 'rails-controller-testing', '1.0.4'
  gem 'minitest',                 '5.11.3'
  gem 'minitest-reporters',       '1.3.8'
  gem 'guard',                    '2.16.2'
  gem 'guard-minitest',           '2.4.6'
end

group :production do
end

#Tzinfo für Zeitzoneninformationen unter Windows-muss Datenjuwel enthalten
#gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

Gemfile.lock aktualisiert (möglicherweise nicht erforderlich)

docker-compose run app bundle update

Webpacker installieren

Für Rails 6 ist ein Webpacker erforderlich. Es ist nicht so installiert wie es ist, also installieren Sie es

docker-compose run app rails webpacker:install

Datenbankeinstellungen

config/database.yml Ordnen Sie Host, Benutzername und Passwort "docker-compose.yml" zu

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  
#Kürzung...

docker-compose build 'Build' ist jedes Mal erforderlich, wenn Sie eine Docker- oder Gem-Datei ändern Es wird einige Zeit dauern, da auch die Bundle-Installation durchgeführt wird.

docker-compose build

Starten Sie zum Schluss den Container

docker-compose up

Datenbankerstellung

Es wird gesagt, dass es keine Datenbank gibt, wie sie ist. Erstellen Sie daher eine Datenbank für die Entwicklungsumgebung

docker-compose run app rake db:create

Funktionsprüfung

Überprüfen Sie den Container, der mit "Docker ps" ausgeführt wird Es werden drei Container ausgeführt: DB, Rails und Webpack-Dev-Server.

$ docker ps
CONTAINER ID        IMAGE                            COMMAND                  ...              PORTS                              NAMES
1fb4f53d5652        sample_app_on_docker_app         "sh /usr/bin/entrypo…"   ...    0.0.0.0:3000->3000/tcp             sample_app_on_docker_app_1
ccd40c018d53        sample_app_on_docker_webpacker   "sh /usr/bin/entrypo…"   ...    3000/tcp, 0.0.0.0:3035->3035/tcp   sample_app_on_docker_webpacker_1
74392532098a        postgres:11.0-alpine             "docker-entrypoint.s…"   ...    0.0.0.0:5432->5432/tcp             sample_app_on_docker_db_1

Wenn Sie mit einem Browser auf localhost: 3000 zugreifen

Vielen Dank für Ihre harte Arbeit "Yay! Sie sind auf Schienen!"

Trouble shoot

check_yarn_integrity bezogen

Fehler beim Starten eines Containers mit "Docker-Compose Up"

app_1        | ========================================
app_1        |   Your Yarn packages are out of date!
app_1        |   Please run `yarn install --check-files` to update.
app_1        | ========================================
app_1        | 
app_1        | 
app_1        | To disable this check, please change `check_yarn_integrity`
app_1        | to `false` in your webpacker config file (config/webpacker.yml).
app_1        | 
app_1        | 
app_1        | yarn check v1.16.0
app_1        | info Visit https://yarnpkg.com/en/docs/cli/check for documentation about this command.
app_1        | 
app_1        | 
app_1        | Exiting
sample_app_on_docker_app_1 exited with code 1

config/webpacker.yml Ändern Sie wie folgt

#...Kürzung

development:
  <<: *default
  compile: false # true ->Wechseln Sie zu false

  # Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
  check_yarn_integrity: true
  
#Kürzung...

"webpack-dev-server" not found

Ebenso ein Fehler, der beim Starten eines Containers mit "Docker-Compose Up" auftritt

webpacker_1  | yarn run v1.16.0
webpacker_1  | error Command "webpack-dev-server" not found.
webpacker_1  | info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
sample_app_on_docker_webpacker_1 exited with code 1

Weil webpack-dev-server nicht in "package.json" beschrieben werden sollte Installieren Sie den Webpack-Dev-Server

docker-compose run app yarn add webpack-dev-server

Bonus

Bildgröße 477 MB Ich beabsichtige, viel Weisheit meiner Vorfahren auszuleihen, um das Gewicht zu reduzieren. Als ich anfing, Docker zu lernen, war das Bild, das ich gemacht habe, ungefähr 1,5 GB ...

$docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
sample_app_on_docker_app         latest              84aed607a3d2        31 minutes ago      477MB
sample_app_on_docker_webpacker   latest              84aed607a3d2        31 minutes ago      477MB

Recommended Posts

Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials (Rails 6 + PostgreSQL + Webpack)
Erstellen Sie eine Entwicklungsumgebung für Docker + Rails6 + Postgresql
Erstellen Sie mit Docker-Introduce Bootstrap und Font Awesome with Webpack- eine lokale Entwicklungsumgebung für Rails-Tutorials.
Erstellen Sie eine Debug-Umgebung auf einem Container. Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials.
Ich habe eine Entwicklungsumgebung mit Rails6 + Docker + PostgreSQL + Materialise erstellt.
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
Verfahren zum Erstellen einer Rails-Anwendungsentwicklungsumgebung mit Docker [Rails, MySQL, Docker]
Erstellen Sie mit Docker Compose eine Entwicklungsumgebung für Django + MySQL + nginx
Erstellen Sie mit Docker schnell eine WordPress-Entwicklungsumgebung
Erstellen Sie eine Entwicklungsumgebung für Docker, Java und Code
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
Vorlage: Erstellen Sie eine Ruby / Rails-Entwicklungsumgebung mit einem Docker-Container (Ubuntu-Version).
Vorlage: Erstellen Sie eine Ruby / Rails-Entwicklungsumgebung mit einem Docker-Container (Mac-Version).
Erstellen Sie mit Docker eine lokale Couchbase-Umgebung
[Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
So erstellen Sie eine Rails 6-Umgebung mit Docker
Einfache Konstruktion der Docker + Django-Entwicklungsumgebung
Schritte zum Erstellen einer Ruby on Rails-Entwicklungsumgebung mit Vagrant
Erstellen Sie eine Laravel / Docker-Umgebung mit VSCode devcontainer
Erstellen einer Entwicklungsumgebung für Java-Webanwendungen mit Docker für Mac Teil1
[Kopieren und Einfügen] Erstellen Sie mit Docker Compose Part 2 eine Laravel-Entwicklungsumgebung
Einfache Erstellung der Docker Compose + Django-Entwicklungsumgebung
[Win10] Erstellen Sie eine JSF-Entwicklungsumgebung mit NetBeans
[Rails] So erstellen Sie eine Umgebung mit Docker
Erstellen Sie mit Docker für Mac Teil2 eine Entwicklungsumgebung für Java-Webanwendungen
Konstruktions- und Entwicklungsverfahren für lokale WordPress-Umgebungen mit Docker
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
Erstellen Sie eine Entwicklungsumgebung, um Ruby on Jets + React-Apps mit Docker zu erstellen
Erstellen Sie eine Ruby on Rails-Entwicklungsumgebung in AWS Cloud9
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
Konstruktionshandbuch für eine stabile Entwicklungsumgebung für "Rails6" mit "Docker-compose"
[Hinweis] Erstellen Sie eine Python3-Umgebung mit Docker in EC2
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
Erstellen einer Docker-Umgebung mit WSL
Erstellen Sie DynamoDB local mit Docker
Erstellen Sie mit IntelliJ IDEA eine Entwicklungsumgebung "Spring Thorough Introduction"
Erstellen Sie eine Entwicklungsumgebung für Rails-Anwendungen mit Docker [Docker, Rails, Puma, Nginx, MySQL]
Erstellen Sie mit Docker eine Umgebung für Rails5 und postgresql, damit auch pgadmin verwendet werden kann
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Erstellen Sie mit Docker eine Vue3-Umgebung!