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.
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.
Ich habe trotzdem Remote Development installiert. Suchen Sie in VS Code Extensions nach Remote Development (Container) und installieren Sie es.
Suchen Sie ebenfalls nach Ruby und installieren Sie es.
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 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.lock
ist leer und OK.
touch Gemfile.lock
vi Gemfile
Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.2'
{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"
Öffnen Sie das zuvor mit VSCode erstellte Arbeitsverzeichnis (das Verzeichnis mit "DockerFile" und "docker-compose.yml").
Klicken Sie auf das Symbol unten links und wählen Sie "Entwicklungscontainer-Konfigurationsdateien hinzufügen"> "Aus docker-compose.yml"> "Web".
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.
addPort
eingestellt. (Wenn Sie mit Devise eine Verknüpfung zu Google Mail herstellen möchten, fügen Sie hier "587: 587" hinzu.)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"]
}
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)
Wenn der Build abgeschlossen ist, drücken Sie auf der Registerkarte Terminal die Taste +, um Bash zu öffnen.
Geben Sie dann den folgenden Befehl ein, um ein Rails-Projekt zu erstellen.
rails new . --force --database=mysql --skip-bundle
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
Erstellen Sie eine Datenbank mit dem folgenden Befehl.
bundle update
rails db:create
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
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.
Wählen Sie danach "{name} _development" aus "Choose Database", um die Datenbank für die Entwicklungsumgebung zu öffnen.
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"],
}
]
}
Sie können Image neu starten, neu erstellen und mit F5
debuggen!
Ein Server läuft bereits. Check / app / tmp / pids / server.pid.
wird angezeigtrm -f tmp/pids/server.pid