[RUBY] Super Anfänger baut Rails 6 + Postgresql-Umgebung mit Docker bis zum Ende

Bis zum Baubeginn

Ich wollte Docker ansprechen, also habe ich beschlossen, die oben genannte Umgebung zu erstellen. Ich wiederholte Versuch und Irrtum, weil ich keine Vorkenntnisse hatte ... Ich habe es jedoch geschafft, es zu bauen, also werde ich eine Notiz hinterlassen. Ich habe den Notizen und Erklärungen für die Teile, die ich nicht gut verstanden habe, "?" Hinzugefügt.

Erforderliche Ordner und Dateien

Bereiten Sie einen Ordner mit einem beliebigen Namen vor, und hier ist es "my_app".

$ mkdir my_app

Bereiten Sie die folgenden Dateien in my_app vor

$ touch xxx(Erforderlicher Dateiname)

- my_app
    - .dockerignore
    - Dockerfile
    - docker-compose.yml
    - Gemfile
    - Gemfile.lock
    - entrypoint.sh

Bearbeiten Sie jede Datei wie folgt.

.dockerignore Verhindert, dass lokale Module und Debug-Protokolle in das Docker-Image kopiert werden. Die erforderlichen Module unterscheiden sich zwischen der Mac-Umgebung und der Linux-Umgebung in Docker ... Ist es das? Ohne dies erhalte ich jedenfalls einen Fehler in Bezug auf Node.js 12.x.

.dockerignore:.dockerignore


node_modules
npm-debug.log

.Dockerfile Installieren Sie postgresql und Garn sowie Node.js, die für rails6 Webpacker erforderlich sind. Ich kann jeden der aufgelisteten Befehle nur grob verstehen (Fu) Ich denke ich muss lernen ...

Dockerfile


FROM ruby:2.7.1

#Erforderliche Bibliotheksinstallation
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

#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

# Node.installiere js
RUN curl -SL https://deb.nodesource.com/setup_12.x | bash
RUN apt-get install -y nodejs

#Erstellen Sie einen Arbeitsordner in einem Container
RUN mkdir /my_app
WORKDIR /my_app
COPY Gemfile /my_app/Gemfile
COPY Gemfile.lock /my_app/Gemfile.lock
RUN bundle install
COPY . /my_app

#entrypoint.sh und Verbindungseinstellungen
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 Hier sind der in Postgresql verwendete Benutzername und das Passwort "postgres". Es gibt "Web" und "DB" im Service.

docker-compose.yml


version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/my_app
    ports:
      - "3000:3000"
    depends_on:
      - db

Gemfile

Gemfile


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

Gemfile.lock Sie müssen den Inhalt nicht bearbeiten, sondern nur die Datei generieren.

entrypoint.sh

entrypoint.sh


#!/bin/bash
set -e

#Der Server, der seit dem letzten Start des Rails-Servers geblieben ist.Verarbeitung zum Löschen von PID?
rm -f /my_app/tmp/pids/server.pid

#Führen Sie den Hauptprozess des Containers aus(Von CMD in Dockerfile angegebener Befehl)
exec "$@"

Erstellen einer Rails-App

run baut das Web alleine auf? Und läuft Rails new im Webcontainer

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

--no-deps: Starten Sie den verknüpften Dienst nicht (starten Sie die mit dem Web verknüpfte Datenbank jetzt nicht?) --skip-bundle: Bundle nicht ausführen

bundle install Das Gemfile wurde mit den vorherigen "Rails New" umgeschrieben. Wenn Sie das Image erstellen, wird auch die Bundle-Installation ausgeführt. Führen Sie daher den folgenden Befehl aus.

$ docker-compose build

Datenbankeinstellungen

Ich denke, der Arbeitsordner enthält bereits eine Reihe bekannter Rails-Dateien Bearbeiten Sie config / database.yml wie folgt.

config/database.yml


default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  #docker-compose.Stimmen Sie mit dem in yml geschriebenen Postgresql-Benutzernamen und -Kennwort überein
  username: postgres
  password: postgres
  pool: 5

development:
  <<: *default
  database: my_app_development

test:
  <<: *default
  database: my_app_test

Installation und Konfiguration des Webpackers

Webpacker installieren

Führen Sie "Bundle Exec Rails Webpacker: Install" im Webcontainer aus.

$ docker-compose run web bundle exec rails webpacker:install

Webpacker-Einstellungen

In meinem Fall tritt beim Starten des Servers ein Fehler auf, wenn ich diese Einstellung nicht vornehme. Bearbeiten Sie die von "Rails Webpacker: Install" generierte "config / webpacker.yml" wie folgt:

config/webpacker.yml


development:
  dev_server:
    host: webpacker
    hmr: true

Fügen Sie außerdem den folgenden Code zu config / environment / development.rb hinzu. Aber vielleicht ist dieser Prozess allein nicht notwendig.

config/environments/development.rb


config.webpacker.check_yarn_integrity = false

Container-Start

$ docker-compose up

An dieser Stelle können Sie auf http: // localhost: 3000 / zugreifen. Ein Fehlerbildschirm wird angezeigt, da die Datenbank noch nicht erstellt wurde. Es ist wirklich rudimentär, aber es war ein langer Weg, also war ich ziemlich ungeduldig (lacht)

DB-Erstellung

$ docker-compose run web rails db:create

Bau abgeschlossen

Wenn Sie "Yay! Sie sind auf Schienen!" Unter "http: // localhost: 3000 /" sehen, sind Sie erfolgreich! Wenn Sie unnötige Docker-Images oder -Container erstellt haben, löschen Sie diese bitte selbst.

Ich denke, es gibt viele Punkte, die für den ersten veröffentlichten Artikel nicht erreicht werden können. Vielen Dank, dass Sie bis zum Ende bei uns bleiben. Wenn Sie Fehler im Artikel finden, lassen Sie es uns bitte wissen.

Referenz

Aufbau der Docker + Rails6 + PostgreSQL-Umgebung Problem und Lösung, dass der Container unmittelbar nach dem Zusammenstellen des Dockers aufgrund eines Garnfehlers abstürzt Make Node.js Web Application Docker Ich möchte eine vorhandene Rails6-App mit einer Kombination aus Docker und Webpacker verwenden Docker-Compose Ich habe den Unterschied zwischen 'up', 'build' und 'start' nicht verstanden, also habe ich ihn zusammengefasst.

Recommended Posts

Super Anfänger baut Rails 6 + Postgresql-Umgebung mit Docker bis zum Ende
Erstellen einer Rails 6- und PostgreSQL-Umgebung mit Docker
So erstellen Sie eine Rails 6-Umgebung mit Docker
[Rails] So erstellen Sie eine Umgebung mit Docker
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
Ich habe eine Entwicklungsumgebung mit Rails6 + Docker + PostgreSQL + Materialise erstellt.
Erstellen Sie mit Docker eine Umgebung für Rails5 und postgresql, damit auch pgadmin verwendet werden kann
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
[Anfänger] Verfahren zum Anmelden bei der mit Vagrant erstellten virtuellen Umgebung
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
So installieren Sie Pry nach dem Erstellen einer Rails-Entwicklungsumgebung mit Docker
Erstellen einer PostgreSQL-Umgebung mit Docker (vom Setup bis kurz vor der Entwicklung)
So erstellen Sie eine Rails + Vue + MySQL-Umgebung mit Docker [neueste Version 2020/09]
Schienenumgebungskonstruktion mit Docker (persönliche Apokalypse)
Mit Docker auf Heroku bereitstellen (Rails 6, MySQL)
Bereiten Sie die Formatumgebung für "Rails" (VScode) vor.
Warten Sie, bis PostgreSQL mit Docker gestartet ist, und starten Sie dann den WEB-Dienst
Probleme, denen ich beim Erstellen der Digdag-Umgebung mit Docker verfallen war
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials (Rails 6 + PostgreSQL + Webpack)
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
[Rails] Rails neu, um eine Datenbank mit PostgreSQL zu erstellen
Code zum Verbinden von Rails 3 mit PostgreSQL 10
[Rails] Verwendung von PostgreSQL in einer Vagrant-Umgebung
Versuchen Sie, das gemeinsame Layout mit Schienen zusammenzufassen
Mit Rails + Docker einfach Hallo Welt anzuzeigen
Führen Sie Docker in die Entwicklungs- und Testumgebung vorhandener Rails- und MySQL-Apps ein
So installieren Sie Docker in der lokalen Umgebung einer vorhandenen Rails-App [Rails 6 / MySQL 8]
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
[Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker
Aufbau der Rails Docker-Umgebung
Was ist zu tun, wenn in einer der Quellen in der Entwicklungsumgebung mit Docker × Rails × RSpec "Nicht gefunden" angezeigt wird?
[Docker-Umgebung] Umgang mit ActiveSupport :: MessageEncryptor :: InvalidMessage
[Grobe Erklärung] So trennen Sie den Betrieb der Produktionsumgebung und der Entwicklungsumgebung mit Rails
Süchtig nach dem Webpacker, der standardmäßig mit Rails 6 geliefert wird
SSL in der lokalen Umgebung von Docker / Rails / Puma
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
Docker-Befehl zum Erstellen eines Rails-Projekts in einem einzigen Schlag in einer Umgebung ohne Ruby
Umgang mit dem Fehler yaml.scanner.ScannerError: Beim Scannen nach dem nächsten Token, das beim Erstellen einer Rails-Umgebung mit Docker angezeigt wurde
[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen
Festlegen von Umgebungsvariablen bei Verwendung von Payjp mit Rails