So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)

In diesem Artikel werde ich vorstellen, wie Sie mit Docker eine Entwicklungsumgebung für Ruby on Rails (im Folgenden: Rails) der 5.x-Serie erstellen.

Was sind die Vorteile des Aufbaus einer Umgebung mit Docker?

Die meisten Anfänger von Rails installieren es normalerweise direkt auf ihrem Computer, um eine Entwicklungsumgebung zu erstellen. Wenn Sie jedoch aufgrund einer subtilen Umgebung (z. B. Ruby-Version oder Umgebungsvariablen) stolpern, Ich denke, es wird viel Zeit in Anspruch nehmen, um das Problem zu beheben.

Erstellen Sie daher mit Docker eine Rails-Umgebung in der virtuellen Umgebung Gleiches Verhalten kann in jeder Entwicklungsumgebung auf jedem Computer erreicht werden, wodurch Fehler aufgrund unterschiedlicher Umgebungen vermieden werden. Es ist auch ein Vorteil, dass Sie im schlimmsten Fall einmal zurücksetzen können, wenn Sie zu viel mit der Umgebung zu tun haben.

Wenn Sie versuchen, die erstellte Anwendung als Produktionsumgebung nach außen zu veröffentlichen Sie können es als stabile Anwendung ausführen, indem Sie den Unterschied zwischen der Entwicklungsumgebung und der Produktionsumgebung minimieren.  Möglicherweise ist es schwierig, mit Docker eine virtuelle Umgebung zu erstellen und zu veröffentlichen. In letzter Zeit verfügen sogar Cloud-Dienste wie AWS über Dienste wie ECS, die Docker-Container so ausführen können, wie sie sind. Es wird auch einfacher, die mit Docker erstellte Umgebung zu veröffentlichen.

Voraussetzungen

Docker auf Ihrem Computer installiert

Wenn Sie Docker nicht installiert haben, laden Sie das Docker-Installationsprogramm von der offiziellen Website herunter und installieren Sie es. → Docker Official

Erstellen Sie außerdem einen beliebigen Arbeitsordner. Hier erstellen wir einen Ordner namens "Rails-Docker" und arbeiten daran.

$ mkdir rails-docker
$ cd rails-docker

Vorbereitung von Docker-bezogenen Dateien

Bereiten Sie die folgenden vier leeren Dateien in Rails-Docker vor. Wenn Sie VScode verwenden, können Sie ihn erstellen, indem Sie eine neue Datei erstellen. Sie können auch den Touch-Befehl vom Mac-Terminal aus verwenden.

.
├── Dockerfile #Erstelle neu
├── Gemfile #Erstelle neu
├── Gemfile.lock #Erstelle neu
└── docker-compose.yml #Erstelle neu

Erläuterung der Docker-Datei

Docker erstellt den Container basierend auf einer Datei namens Dockerfile. Ein Docker-Image (Vorlage des Containers) wird erstellt.

Schreiben Sie zunächst den vollständigen Text der Docker-Datei. Die verwendete Version von Ruby ist 2.7.0.

FROM ruby:2.7.0
RUN apt-get update -qq && apt-get install -y build-essential nodejs
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app

Obwohl es sich um ein Bulletin handelt, werde ich die Bedeutung jedes einzelnen erläutern.

Erklärung von Gemfile

In Ruby können Sie den Edelstein, den Sie in Ihrer Umgebung verwenden möchten, mit einer Datei namens Gemfile definieren.

Ein Juwel ist eine Ruby-Bibliothek. Das Gem wird von einem Paketverwaltungssystem für Ruby namens RubyGems verwaltet und kann über den von RubyGems bereitgestellten gem-Befehl installiert werden.

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

Ich werde es noch einmal erklären.

Wenn ich den Befehl "bundle install" in dem Verzeichnis ausführe, in dem sich die Gemfile befindet, Sie können den definierten Edelstein gemäß der Definition in der Gemfile installieren.

Kopieren Sie für die zuvor erwähnte Docker-Datei die Gem-Datei in das Arbeitsverzeichnis des Containers. Sie haben angegeben, dass die Bundle-Installation in diesem Ordner ausgeführt werden soll.

Erklärung von Gemfile.lock

Tatsächlich muss Gemfile.lock zunächst nichts schreiben. Dies ist keine Datei, die Sie direkt bearbeiten Nach dem Ausführen der Bundle-Installation basierend auf Gemfile Die installierten Edelsteine werden nun in Gemfile.lock aufgelistet.

Informationen zur Verwendung finden Sie in Gemfile.lock, um den installierten Edelstein und die installierte Version zu finden. Sie können die Bundle-Installation auch über Gemfile.lock ausführen Gemfile.lock wird verwendet, wenn Sie genau dieselbe Umgebung neu erstellen möchten oder wenn Sie mit einer großen Anzahl von Personen entwickeln.

Ist es nicht nur eine Gemfile? Als Ergänzung zu denen, die es für scharf hielten, ist einer der Gründe, dass Gemfile tatsächlich so geschrieben werden kann.

gem 'rails', '~> 5.2.1'

In diesem Fall ist die Version der durch Bundle-Installation installierten Schienen 5.2.1 oder höher Die tatsächliche Version, die installiert (veröffentlicht) werden kann, hängt von der Zeit ab.

In Gemfile.lock sind jedoch das Gem selbst und die spezifische Version, die tatsächlich installiert wurde, als versucht wurde, gemäß Gemfile zu installieren, Es werden sogar die Pakete aufgezeichnet, die für zufällige Anforderungen installiert wurden.

Kurz zusammengefasst ist Gemfile eine "Liste der von der App benötigten Edelsteine". Auf der anderen Seite enthält Gemfile.lock "Informationen zu dem Gem, das tatsächlich installiert wurde, weil Sie dem Gemfile gefolgt sind".

Erklärung von docker-compose.yml

Diese yml-Datei wird von Docker Compose verwendet.

Docker Compose ist für Anwendungen gedacht, die aus mehreren Containern bestehen Es ist ein Tool zum Verwalten, z. B. zum Erstellen eines Docker-Images und zum Starten / Stoppen jedes Containers.

In Docker Compose werden die Definitionen für mehrere Container, einschließlich Optionen für den Docker-Build und den Container-Start, in einer Datei mit dem Namen docker-compose.yml beschrieben. Sie können damit ein Docker-Image erstellen oder einen Container starten.

Wenn Sie Rails wie eine Entwicklungsumgebung selbst ausführen möchten, können Sie einfach Dockerfile verwenden. Neben dem Anwendungsserver zum Ausführen von Rails Ein Webserver zum Akzeptieren des Zugriffs aus dem Internet beim tatsächlichen Veröffentlichen. Möglicherweise bereiten wir auch einen Datenbankserver zum Speichern und Verarbeiten von Daten vor.

docker-compose.yml


version: '3'
services:
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app
    ports:
      - 3000:3000
    depends_on:
      - db
    tty: true
    stdin_open: true
  db:
    image: mysql:5.7
    volumes:
      - db-volume:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
volumes:
  db-volume:

Da für Rails auch eine Datenbank erforderlich ist, erstellen wir einen Container für den Datenbankserver, der sowohl MySQL als auch den Webserver verwendet. Obwohl hier nicht im Detail erläutert, wird der Datenbankserver (Container), mit dem Rails verknüpft ist, in der Liste "web" in "abhängige_on" namentlich angegeben.

Schienenstart

Schienenprojekt erstellen (Schienen neu)

Führen Sie den folgenden Docker-Compose-Befehl in dem Ordner (Rails-Docker-Ordner) aus, in dem sich Docker-Compose.yml befindet.

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

Ich werde erklären, wie man den Befehl liest, einschließlich der Optionen ↓

--docker-compose: Mit einem Tool namens docker-compose --run: Führen Sie den folgenden Befehl aus --web: in einem Webcontainer --rails new: Erstellen Sie ein neues Projekt mit Schienen -.: Für das aktuelle Verzeichnis ---- force: Überschreibt vorhandene Dateien (hier Gemfile, Gemfile.lock) ---- database = mysql: MySQL wird jedoch für die Rails-Datenbank verwendet.

Es hat die Bedeutung.

Wenn Sie diesen einzeiligen Befehl ausführen, dauert die Verarbeitung einige Minuten. Warten Sie also geduldig, während Sie Schokolade essen.

Führen Sie build aus

Installation von Gem zu Gemfile hinzugefügt, Führen Sie build aus, um die erstellte Datei in den Container zu bringen.

$ docker-compose build

Datenbankeinstellungsdatei bearbeiten

Bearbeiten Sie nach Abschluss des Builds die Einstellungen in der von Rails verwendeten Datenbankdatei. Die Zieldatei ist ** database.yml ** im Konfigurationsverzeichnis.

config/database.yml


default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password #hinzufügen
  host: db #Veränderung

Das Passwort muss mit dem in docker-compose.yml angegebenen Passwort übereinstimmen.

docker-compose.yml


...
    environment:
      MYSQL_ROOT_PASSWORD: password #Spiel hier
...

Außerdem legt das Hostfeld den Namen des MySQL-Containers fest.

Container starten

Führen Sie den folgenden Befehl aus, um den Container zu starten:

$ docker-compose up -d

docker-compose up ist ein Befehl zum Starten eines Containers basierend auf docker-compose.yml Es kann im Hintergrund mit der Option "-d" gestartet werden.

Datenbank erstellen

Im Moment wurde der Container gerade gestartet und die Datenbank wurde nicht erstellt. Führen Sie den folgenden Befehl aus, um die Datenbank zu erstellen.

$ docker-compose run web bundle exec rails db:create

Es ist ein Prozess zum Ausführen von Rails db: create (= Erstellen einer neuen Datenbank) im Webcontainer, in dem Rails ausgeführt werden.

Bestätigung des Starts des Rails Development Servers

Sie haben den Rails-Entwicklungsserver erfolgreich gestartet. Geben Sie ** localhost: 3000 ** in die Adressleiste Ihres Browsers ein und überprüfen Sie den Start.

image.png

Mit Schienen sind Sie fertig, wenn Sie den bekannten Bildschirm sehen.

Behälter stoppen

Führen Sie den folgenden Befehl aus, um den Entwicklungsserver in einem Stapel zu stoppen.

$ docker-compose down

Wenn Sie es erneut starten möchten, führen Sie docker-comopose up -d aus.

Schließlich

Die dadurch erstellten Dateien sind in Github aufgeführt. Wenn Sie die Ordnerstruktur nicht verstehen oder vergleichen möchten, ob sie in Ihrer Umgebung funktioniert, lesen Sie sie bitte.

Recommended Posts

So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
Schritte zum Erstellen einer Ruby on Rails-Entwicklungsumgebung mit Vagrant
So erstellen Sie eine Rails 6-Umgebung mit Docker
[Rails] So erstellen Sie eine Umgebung mit Docker
[Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker
Erstellen Sie eine Ruby on Rails-Entwicklungsumgebung in AWS Cloud9
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 PureScript-Entwicklungsumgebung
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
Erstellen einer Entwicklungsumgebung für Ruby on Rails mit Docker + VSCode (Remote Container)
So installieren Sie Pry nach dem Erstellen einer Rails-Entwicklungsumgebung mit Docker
Erstellen Sie eine Entwicklungsumgebung, in der die Haltepunkte von Ruby on Rails unter Windows funktionieren
Erstellen Sie eine Entwicklungsumgebung für Docker + Rails6 + Postgresql
Einführung in Rspec mit Ruby on Rails x Docker
Erstellen Sie mit Docker schnell eine WordPress-Entwicklungsumgebung
So erstellen Sie eine Pytorch-Umgebung unter Ubuntu
Erstellen Sie eine Debug-Umgebung auf einem Container. Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials.
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
So erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
Verwendung von Ruby on Rails
Erstellen Sie eine Unity-Entwicklungsumgebung auf Docker
Ich habe eine Entwicklungsumgebung mit Rails6 + Docker + PostgreSQL + Materialise erstellt.
So erstellen Sie mit Docker ~ Express ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Docker-Befehl zum Erstellen eines Rails-Projekts in einem einzigen Schlag in einer Umgebung ohne Ruby
[Docker] Entwicklung der Entwicklungsumgebung Rails6 / Ruby2.7 / MySQL8
[Ruby] Erstellen einer Ruby-Entwicklungsumgebung unter Ubuntu
Erstellen Sie eine Java-Entwicklungsumgebung auf dem Mac
[Ruby on Rails] Verwendung von redirect_to
Erstellen Sie eine Umgebung mit Docker unter AWS
Erstellen Sie eine Ultra96v2-Entwicklungsumgebung auf Docker 1
Einfache Konstruktion der Docker + Django-Entwicklungsumgebung
Ruby on Rails - Von der Umgebungskonstruktion bis zur einfachen Anwendungsentwicklung auf WSL2
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Verfahren zum Erstellen einer Rails-Anwendungsentwicklungsumgebung mit Docker [Rails, MySQL, Docker]
So erstellen Sie mit Docker ~ MySQL ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
Erstellen Sie mit Docker Compose eine Entwicklungsumgebung für Django + MySQL + nginx
So erstellen Sie mit Docker ~ Sequelize ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
So erstellen Sie eine Abfrage mithilfe von Variablen in GraphQL [Verwenden von Ruby on Rails]
Erstellen Sie eine Laravel / Docker-Umgebung mit VSCode devcontainer
So erstellen Sie eine App mit Ruby on Rails (vorausgesetzt, die Umgebung wurde erstellt)
Minimale Schritte zum Einrichten einer Ruby-Umgebung mit rbenv unter Ubuntu 20.04
Ausführen mit normalen Befehlen für die Entwicklungssprache in der Docker-Entwicklungsumgebung
[Kopieren und Einfügen] Erstellen Sie mit Docker Compose Part 2 eine Laravel-Entwicklungsumgebung
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps