[RUBY] Rails API-Serverumgebungskonstruktion mit Docker-Compose

Über den Autor

Ich habe die Ruby and Rails-Kurse von Progate durchlaufen. Danach habe ich mit Docker eine Umgebung erstellt und mit Rails einen API-Server erstellt.

Über diesen Artikel

Bei Progate habe ich gelernt, wie man Rails einschließlich Ansichten schreibt, aber ich wollte Rails nur als API-Server verwenden. Da ich mit Docker entwickeln wollte, erstellte ich eine Rails-Entwicklungsumgebung unter Bezugnahme auf den offiziellen Schnellstart. Fassen Sie das dabei gewonnene Know-how zusammen.

Ich werde in einem anderen Artikel über Gem schreiben, das in der API-Serverentwicklung verwendet wird.

Annahme

Verstehen Sie, wie Sie Docker und Docker-Compose verwenden

Umgebung

Ruby 2.7 MySQL 5.7 VSCode Mac 10.14.5 Zum Anzeigen der Sequel Pro-Datenbank

Bis Rails neu

Erstellen Sie zunächst einen Projektordner. Hier ist es Schienenmuster. Und erstellen Sie direkt darunter eine Docker-Datei

FROM ruby:2.7

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

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

Bereiten Sie als Nächstes ein Gemfile vor, um Schienen zu installieren

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

Erstellen Sie eine leere Gemfile.lock

touch Gemfile.lock

Erstellen Sie "entrypoint.sh", wie in der Docker-Datei beschrieben

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

Unter Docker Official Quick Start erfahren Sie, warum diese Dateien erstellt werden.

Erstellen Sie "docker-compose.yml"

docker-compose.yml


version: '3'
services:
  server:
    build: .
    tty: true
    volumes:
      - .:/myapp
    working_dir: /myapp
    ports:
      - "3000:3000"
    depends_on:
      - mysql
    command: bash
    # command: > 
    #   bash -c "rm -f tmp/pids/server.pid &&
    #       bundle exec rails s -p 3000 -b '0.0.0.0'"
  mysql:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: mysql
    volumes:
      - "./mysql/db-data/:/var/lib/mysql" #Datenpersistenz
      - "./mysql/my.cnf:/etc/mysql/conf.d/my.cnf" #Notwendig, um Japanisch als Daten zu verwenden

Für die Persistenz von MySQL-Daten und japanische Unterstützung

Erstellen Sie einen Rails-Sample> MySQL> DB-Datenordner. Erstellen Sie "my.cnf" im Ordner "mysql"

my.cnf


[mysqld]
character-set-server=utf8

Bis zu diesem Punkt ist dies die Konfiguration. スクリーンショット 2020-09-26 20.12.16.png

Wenn Sie das können, machen Sie "Rails New".

docker-compose run server rails new . -MC --force --api --database=mysql --skip-active-storage

Suchen Sie die Optionen im Befehl Rails und in der Befehlshilfe, und lassen Sie diejenigen aus, die Sie nicht benötigen. Die wichtigen Optionen sind:

--force //Dateien auf Schienen neu überschreiben
--api //Generieren Sie keine unnötigen Ansichten für die API-Entwicklung
--database=myql //Standardmäßig SQLite, aber MySQL angeben

Sie können damit verschiedene Dinge machen.

スクリーンショット 2020-09-26 20.23.52.png

Hier werden "Gemfile" und "Gemfile.lock" überschrieben und neu. Um dies im Bild wiederzugeben

docker-compose build

Es besteht die Notwendigkeit.

Wenn Sie den benötigten Edelstein im Voraus kennen, schreiben Sie ihn hier in die Edelsteindatei.

Dies vervollständigt Schienen neu

Schreiben Sie eine Konfigurationsdatei, um eine Verbindung zu MySQL herzustellen.

config > database.yml

database.yml


default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: mysql

development:
  <<: *default
  host: mysql
  database: myapp_development

...
test:
  <<: *default
  host: mysql
  database: myapp_test

Ich brauchte keine Produktion, also habe ich es auskommentiert. Der Hostname ist der Dienstname von "docker-compose.yml" Das Passwort wird auch in "docker-compose.yml" angegeben

Wenn Sie können, starten Sie den Container mit "docker-compose up -d" und gehen Sie mit der Attach Shell von VS Code hinein.

rails db:create

Erstellen Sie eine DB mit

root@dc075120af8a:/myapp# rails db:create
...
Created database 'myapp_development'
Created database 'myapp_test'

Jetzt haben Sie eine Datenbank. Wenn Sie eine Verbindung mit Sequel Pro herstellen, können Sie bestätigen, dass die Datenbank erstellt wurde

Danach können Sie, wie Sie in Progate erfahren haben, eine Tabelle erstellen, indem Sie ein Modell erstellen und migrieren.

Referenz

Docker Official Quick Start English Bitte beachten Sie, dass der Inhalt für Japaner alt ist.

Rails Guide Rails API Dedicated Application

Recommended Posts

Rails API-Serverumgebungskonstruktion mit Docker-Compose
Aufbau der Rails Docker-Umgebung
Aufbau einer Django-Entwicklungsumgebung mit Docker-Compose (persönliches Memorandum)
Aufbau der Rails6-Entwicklungsumgebung [Mac]
Rails Engineer Environment Construction Ruby2.7.1
Schienen Umgebungsbau Schienen5.2.1 ruby2.5.1 Catalina
Konstruktionshandbuch für eine stabile Entwicklungsumgebung für "Rails6" mit "Docker-compose"
Rails5 + MySQL8.0 + Top-Level-Volume-Umgebungskonstruktion mit Docker-Compose
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
[Rails / MySQL] Aufbau einer Mac-Umgebung
[Rails 6] API-Entwicklung mit GraphQL (Query)
Ruby on Rails 6.0-Umgebungskonstruktionsnotiz
Konstruktionsverfahren für Rails on Docker-Umgebungen
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
Problematischer Ablauf der Rails-Umgebung [Windows 10]
[Rails] Aufbau einer AWS EC2-Instanzumgebung
Rails API
Rails 6 (API-Modus) + MySQL Docker-Umgebungserstellung durch Docker-Compose (für Mac)
Visualisieren Sie die Verarbeitungszeit des Rails-Servers mithilfe des Server-Timings
Schienenumgebungskonstruktion mit Docker (persönliche Apokalypse)
[Docker] Entwicklung der Entwicklungsumgebung Rails6 / Ruby2.7 / MySQL8
Rails & React & Webpacker & MySQL Environment Konstruktionshandbuch
Muskel Rubin auf Schienen Tag 1 ~ Umweltbau ~
CentOS8.2 (x86_64) + ruby2.5 + Rails5.2 + MariaDB (10.3.17) Umgebungskonstruktion
[Rails API x Docker] Einfache Umgebungskonstruktion mit Shell- und Funktionsprüfung mit Flutter
Erstellen Sie eine Bulletin-Board-API mit Zertifizierung und Autorisierung mit Rails 6 # 1 Environment Construction
Bereiten Sie mit Docker-Compose eine Nuxt (Web) + Laravel (API) -Entwicklungsumgebung im selben Repository vor
So verknüpfen Sie Rails6 Vue (aus dem Umgebungsbau)
Umgebungskonstruktionsverfahren für die Verwendung von PowerMock mit JUnit
[Java] Umgebungskonstruktion
Erstellen einer Kaggle-Umgebung mit offiziellem Docker und vscode
Erstellen einer Entwicklungsumgebung mit IntelliJ IDEA + Maven + Tomcat 9
[Persönliches Memo] Ruby on Rails-Umgebungskonstruktion (Windows)
Versuchen Sie, die Rails-App für EC2-Part 2 (Server Construction) bereitzustellen.
[Hinweis] Struts2-Umgebungskonstruktion mit Gradle in Eclipse
500 Interner Serverfehler tritt in der Rails-Produktionsumgebung auf
Aufbau eines NFS-Servers
[Frühling] Umweltbau
[Rails] Nginx, Puma-Umgebungsbereitstellung und Serverstudie [AWS EC2]
Bereitstellen auf Ruby on Rails Elastische Bohnenstange (Umgebungskonstruktion)
Verwenden der PAY.JP-API mit Rails ~ Implementierungsvorbereitung ~ (payjp.js v2)
[Umgebungskonstruktion Mac] Ruby on Rails (+ Webpacker behandelt Fehler)
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
Verwenden der PAY.JP-API mit Rails ~ Kartenregistrierung ~ (payjp.js v2)
Erstellung einer Datenanalyseumgebung mit Docker (persönliches Memorandum)
Aufbau der Penronse-Umgebung [Windows]
[Flattern] Ubuntu 20.04 Umgebungskonstruktion
Serverkonstruktionsverfahren Ubuntu18.04 Server