Erstellen einer Entwicklungsumgebung für Ruby on Rails mit Docker + VSCode (Remote Container)

Einführung

Aufgrund verschiedener Umstände habe ich mich für die Entwicklung einer Webanwendung entschieden und eine Entwicklungsumgebung für Ruby on Rails mit Docker und VSCode erstellt. Ich möchte diese Aufzeichnung als Memorandum aufbewahren. Übrigens, wenn Sie es mit dieser Methode erstellen, wird es im Grunde in VS Code abgeschlossen. Sie müssen nicht in jedem Terminal "Docker-Compose Up" und "Docker-Compose Run Web Rails db: create" eingeben. Sie können "Rails db: create" auf dem VS Code-Terminal ausführen.

VSCode Remote Container (Entwicklung)

Dieses Mal werden wir Remote Container verwenden, eine Erweiterung von VS Code. Wenn Sie diesen Remote-Container verwenden, können Sie mit VS-Code auf die Umgebung des von Docker gestarteten Containers zugreifen und die Programmdatei im Container auf VS-Code bearbeiten und debuggen. Übrigens gibt es eine ähnliche Erweiterung namens Remote Development, aber es scheint, dass dies ein Erweiterungspaket sein wird, das neben dem Docker-Container auch andere SSH- und WSL-Funktionen enthält. Daher umfasst Remote Development Remote Container, Remote SSH und Remote WSL, und ich denke, dass es der Remote Container ist, der mit Docker zusammenhängt.

Verfahren

Installation verschiedener VS Code-Erweiterungen

Installation von Remote Container (Entwicklung)

Ich habe trotzdem Remote Development installiert. Suchen Sie in VS Code Extensions nach Remote Development (Container) und installieren Sie es.

Remote Development.png

Installation der Ruby-Debug-Erweiterung

Suchen Sie ebenfalls nach Ruby und installieren Sie es.

image.png

Vorbereiten eines Arbeitsverzeichnisses für Ruby on Rails

Arbeitsverzeichnis erstellen

Bereiten Sie als Nächstes ein Arbeitsverzeichnis vor, um den eigentlichen Ruby on Rails-Code abzulegen. Erstellen Sie zunächst ein Arbeitsverzeichnis an einem beliebigen Ort.

mkdir path/to/{name}
cd path/to/{name}

Erstellen einer Docker-Datei

Erstellen Sie als Nächstes eine Docker-Datei. Geben Sie den Namen des Arbeitsverzeichnisses in {name} ein.

vi DockerFile

DockerFile


# Pull ruby image
FROM ruby:2.5.3

# Install 
RUN apt-get update -qq && \
    apt-get install -y build-essential \ 
                       libpq-dev \        
                       nodejs           

# Create working directory
ENV APP_ROOT /{name}
RUN mkdir $APP_ROOT

# Set working directory as APP_ROOT
WORKDIR $APP_ROOT

# Add Gemfile
ADD ./Gemfile $APP_ROOT/Gemfile
ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock

# Install Gemfile's bundle
RUN bundle install
ADD . $APP_ROOT

Gemfile und Gemfile.lock erstellen

Gemfile.lock ist leer und OK.

touch Gemfile.lock
vi Gemfile

Gemfile


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

Docker-compose.yml erstellen

{password} ist ein beliebiges Passwort für den Zugriff auf die Datenbank, und {name} ist der obige Name des Arbeitsverzeichnisses. Beachten Sie, dass die Einstellungen für die Portweiterleitung vom lokalen Port 4306 zum DB-Port 3306 zugewiesen werden. Dies liegt daran, dass der Standardport von DB 3306 ist. Daher versuchen wir, Konflikte zu vermeiden, wenn dieser Port bereits auf der lokalen Seite verwendet wird.

vi docker-compose.yml

docker-compose.yml


version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: {password}
      MYSQL_DATABASE: root
    ports:
      - "4306:3306"

  web:
    build: .
    command: /bin/sh #-c "rm -f tmp/pids/server.pid"
    stdin_open: true
    tty: true
    depends_on:
      - db
    volumes:
      - .:/{name}
    ports:
      - "3000:3000"

Remote Container Einstellungen

Öffnen Sie das zuvor mit VSCode erstellte Arbeitsverzeichnis (das Verzeichnis mit "DockerFile" und "docker-compose.yml").

Einstellungsdatei erstellen / bearbeiten

Klicken Sie auf das Symbol unten links und wählen Sie "Entwicklungscontainer-Konfigurationsdateien hinzufügen"> "Aus docker-compose.yml"> "Web". image.png

Dann wird das Verzeichnis ".devcontainer" erstellt, also bearbeiten Sie "devcontainer.json". Als Einschränkung --Die im Verzeichnis .devcontainererstellte **docker-compose.yml wird nicht verwendet **. (Sie können es löschen) -- {name} `gibt den Namen des Arbeitsverzeichnisses an.

json-doc:.devcontainer/devcontainer.json


// If you want to run as a non-root user in the container, see .devcontainer/docker-compose.yml.
{
	"name": "Existing Docker Compose (Extend)",

	// Update the 'dockerComposeFile' list if you have more compose files or use different names.
	// The .devcontainer/docker-compose.yml file contains any overrides you need/want to make.
	"dockerComposeFile": [
		"../docker-compose.yml",
		//"docker-compose.yml"
	],

	// The 'service' property is the name of the service for the container that VS Code should
	// use. Update this value and .devcontainer/docker-compose.yml to the real service name.
	"service": "web",

	// The optional 'workspaceFolder' property is the path VS Code should open by default when
	// connected. This is typically a file mount in .devcontainer/docker-compose.yml
	"workspaceFolder": "/{name}",

	// Add the IDs of extensions you want installed when the container is created.
	"extensions": ["rebornix.ruby"],

	// Use 'forwardPorts' to make a list of ports inside the container available locally.
	// "forwardPorts": [],
	"addPort": ["3000:3000", "4306:3306"]

}

Rails Projektvorbereitung

Behälter öffnen

Klicken Sie auf das Symbol unten links und klicken Sie auf "In Container erneut öffnen", um verschiedene Docker-Images und -Container zu erstellen.

docker stop $(docker ps -q)
docker rm $(docker ps -aq)
docker rmi $(docker images -q)

Erstellen eines Rails-Projekts

Wenn der Build abgeschlossen ist, drücken Sie auf der Registerkarte Terminal die Taste +, um Bash zu öffnen.

image.png

Geben Sie dann den folgenden Befehl ein, um ein Rails-Projekt zu erstellen.

rails new . --force --database=mysql --skip-bundle

DB-Einstellungen

Stellen Sie die DB ein. Geben Sie für "{password}" das in "docker-compose.yml" festgelegte DB-Passwort an.

vi config/database.yml

config/database.yml


default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: {password} # MYSQL_ROOT_PASSWORD in docker-compose.yml
  host: db # service name in docker-compose.yml

DB-Erstellung

Erstellen Sie eine Datenbank mit dem folgenden Befehl.

bundle update
rails db:create

Starten Sie den Server

Starten Sie danach den Server mit dem folgenden Befehl, greifen Sie auf [http: // localhost: 3000 /](http: // localhost: 3000 /) zu, und wenn der Beispielbildschirm angezeigt wird, sind Sie fertig!

rails s -b 0.0.0.0 -p 3000

image.png

Bonus

Sequel Pro Sequel Pro, eine GUI für die DB-Visualisierung, wird ebenfalls über den Port weitergeleitet, sodass es verwendet werden kann. Sie können darauf zugreifen, indem Sie den Benutzernamen, das Kennwort und den Port angeben, die unter [Create docker-compose.yml](Create # docker-compose.yml) angegeben sind. Beachten Sie, dass der Host "127.0.0.1" anstelle von "localhost" sein sollte.

image.png

Wählen Sie danach "{name} _development" aus "Choose Database", um die Datenbank für die Entwicklungsumgebung zu öffnen.

image.png

debuggen

Bearbeiten von launch.json

Wenn Sie mit VSCode debuggen möchten, klicken Sie auf Ausführen> Konfiguration hinzufügen> Docker ~ (wahrscheinlich für Container), und launch.json wird geöffnet. Dann füllen Sie wie folgt aus.

launch.json


{
  "version": "0.2.0",
  "configurations": [
    {
    "name": "Rails App",
    "type": "Ruby",
    "request": "launch",
    "cwd": "${workspaceRoot}", 
    "program": "bin/rails",
    "args": ["s", "-b", "0.0.0.0", "-p", "3000"], 
    }
  ]
}

Führen Sie das Debug aus

Sie können Image neu starten, neu erstellen und mit F5 debuggen!

Error

Ein Server läuft bereits. Check / app / tmp / pids / server.pid. wird angezeigt

rm -f tmp/pids/server.pid

Referenz

Recommended Posts

Erstellen einer Entwicklungsumgebung für Ruby on Rails mit Docker + VSCode (Remote Container)
[Docker] Entwicklung der Entwicklungsumgebung Rails6 / Ruby2.7 / MySQL8
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
Erstellen Sie eine Debug-Umgebung auf einem Container. Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials.
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
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).
Ruby on Rails 6.0-Umgebungskonstruktionsnotiz
Konstruktionsverfahren für Rails on Docker-Umgebungen
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
[Verfahren 1 für Anfänger] Ruby on Rails: Aufbau einer Entwicklungsumgebung
Erstellen Sie eine Entwicklungsumgebung für Rails-Anwendungen mit Docker [Docker, Rails, Puma, Nginx, MySQL]
Schienenumgebungskonstruktion mit Docker (persönliche Apokalypse)
Aufbau einer Laravel-Entwicklungsumgebung mit Docker (Mac)
Muskel Rubin auf Schienen Tag 1 ~ Umweltbau ~
Build Go-Entwicklungsumgebung mit WSL2 + Docker Desktop + VSCode (Remote - Container)
Ruby on Rails - Von der Umgebungskonstruktion bis zur einfachen Anwendungsentwicklung auf WSL2
Schritte zum Erstellen einer Ruby on Rails-Entwicklungsumgebung mit Vagrant
Aufbau der Rails Docker-Umgebung
Einführung in Rspec mit Ruby on Rails x Docker
[Persönliches Memo] Ruby on Rails-Umgebungskonstruktion (Windows)
Konstruktions- und Entwicklungsverfahren für lokale WordPress-Umgebungen mit Docker
Aufbau der Rails6-Entwicklungsumgebung [Mac]
WSL2 + VSCode + Docker-Entwicklungsumgebung
Rails Engineer Environment Construction Ruby2.7.1
Erstellen Sie eine Ruby on Rails-Entwicklungsumgebung in AWS Cloud9
Schienen Umgebungsbau Schienen5.2.1 ruby2.5.1 Catalina
Konstruktionshandbuch für eine stabile Entwicklungsumgebung für "Rails6" mit "Docker-compose"
Bereitstellen auf Ruby on Rails Elastische Bohnenstange (Umgebungskonstruktion)
[Umgebungskonstruktion Mac] Ruby on Rails (+ Webpacker behandelt Fehler)
Erstellen Sie eine Entwicklungsumgebung, um Ruby on Jets + React-Apps mit Docker zu erstellen
Erstellen Sie eine Chisel-Entwicklungsumgebung mit Windows 10 + WSL2 + VScode + Docker
Ich habe eine Entwicklungsumgebung mit Rails6 + Docker + PostgreSQL + Materialise erstellt.
[Aufbau einer Java-Entwicklungsumgebung] Installieren Sie OpenJDK 11 (Java 11) unter macOS mit Homebrew
Erstellen Sie die Node.js-Umgebung mit Docker Compose
Umgebungsbau mit Docker für Anfänger
Erstellen Sie eine Unity-Entwicklungsumgebung auf Docker
Verfahren zum Erstellen einer Rails-Anwendungsentwicklungsumgebung mit Docker [Rails, MySQL, Docker]
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 einer PostgreSQL-Umgebung mit Docker (vom Setup bis kurz vor der Entwicklung)
Konstruktionsverfahren für die Docker-Umgebung "Rails 6 x MySQL 8" für die gemeinsame Nutzung mit Teams
Aufbau einer GPU-Umgebung mit Docker [Version Oktober 2020]