En raison de diverses circonstances, j'ai décidé de développer une application Web, j'ai donc créé un environnement de développement pour Ruby on Rails en utilisant Docker et VSCode. Je voudrais garder ce dossier sous forme de mémorandum.
À propos, si vous le construisez par cette méthode, il est essentiellement complété dans VS Code. Vous n'êtes pas obligé de taper docker-compose up
et docker-compose run web rails db: create
dans chaque terminal, vous pouvez faire rails db: create
sur le terminal VS Code.
Cette fois, nous utiliserons Remote Container, qui est une extension de VS Code. Si vous utilisez ce conteneur distant, vous pouvez accéder à l'environnement du conteneur lancé par Docker avec VS Code, et modifier et déboguer le fichier programme dans le conteneur sur VS Code. À propos, il existe une extension similaire appelée Développement à distance, mais il semble que ce sera un pack d'extension qui comprend également des fonctions SSH et WSL autres que le conteneur Docker. Par conséquent, le développement à distance inclut le conteneur distant, le SSH distant et le WSL distant, et je pense que c'est le conteneur distant qui est lié à Docker.
J'ai quand même installé Remote Development. Recherchez Développement à distance (conteneur) à partir des extensions de code VS et installez-le.
De même, recherchez ruby et installez-le.
Ensuite, préparez un répertoire de travail pour mettre le code Ruby on Rails. Tout d'abord, créez un répertoire de travail à n'importe quel emplacement.
mkdir path/to/{name}
cd path/to/{name}
Ensuite, créez un DockerFile
. Entrez le nom du répertoire de travail dans «{nom}».
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
est vide et OK.
touch Gemfile.lock
vi Gemfile
Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.2'
{password}
est un mot de passe arbitraire pour accéder à la base de données, et {name}
est le nom du répertoire de travail ci-dessus. Notez que les paramètres de transfert de port sont attribués du port local 4306 au port DB 3306. C'est parce que le port par défaut de DB est 3306, nous essayons donc d'éviter les conflits lorsque ce port est déjà utilisé du côté local.
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"
Ouvrez le répertoire de travail créé précédemment avec VSCode (le répertoire contenant DockerFile
et docker-compose.yml
).
Cliquez sur l'icône en bas à gauche et sélectionnez ʻAjouter des fichiers de configuration du conteneur de développement>
Depuis docker-compose.yml>
web`.
Ensuite, le répertoire .devcontainer
est créé, donc éditez devcontainer.json
.
En guise de mise en garde
--Le ** docker-compose.yml
créé dans le répertoire .devcontainer
n'est pas utilisé **. (Vous pouvez le supprimer)
--{nom}
spécifie le nom du répertoire de travail.
--ʻExtensions spécifie l'ID de la fonction d'extension pour le débogage. --ʻAddPort
est utilisé pour définir la redirection de port. (Si vous souhaitez créer un lien avec Gmail avec Devise, ajoutez «" 587: 587 "» ici.)
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"]
}
Cliquez sur l'icône en bas à gauche et cliquez sur «Rouvrir dans le conteneur» pour commencer à créer diverses images et conteneurs Docker.
docker stop $(docker ps -q)
docker rm $(docker ps -aq)
docker rmi $(docker images -q)
Lorsque la construction est terminée, dans l'onglet Terminal, appuyez sur la touche + pour ouvrir Bash.
Tapez ensuite la commande suivante pour créer un projet Rails.
rails new . --force --database=mysql --skip-bundle
Définissez le DB. Pour {password}
, spécifiez le mot de passe DB défini dans docker-compose.yml
.
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
Créez un DB avec la commande suivante.
bundle update
rails db:create
Après cela, démarrez le serveur avec la commande suivante, accédez à [http: // localhost: 3000 /](http: // localhost: 3000 /), et lorsque l'écran d'exemple apparaît, vous avez terminé!
rails
pendant que le serveur est en cours d'exécution, tapez + sur l'onglet Terminal de VS Code pour ouvrir un nouveau terminal.rails s -b 0.0.0.0 -p 3000
Sequel Pro Sequel Pro, qui est une interface graphique de visualisation de base de données, est également redirigé vers le port, il peut donc être utilisé. Vous pouvez y accéder en spécifiant le nom d'utilisateur, le mot de passe et le port spécifiés dans [Create docker-compose.yml](Create # docker-compose.yml). Notez que Host doit être «127.0.0.1» au lieu de «localhost».
Ensuite, sélectionnez «{name} _development» dans «Choose Database» pour ouvrir la base de données de l'environnement de développement.
launch.json
Si vous voulez déboguer avec VSCode, cliquez sur Exécuter> Ajouter une configuration> Docker ~ (probablement pour Container) et launch.json
s'ouvrira.
Remplissez ensuite comme suit.
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"],
}
]
}
Vous pouvez redémarrer, reconstruire l'image et déboguer avec F5
!
Un serveur est déjà en cours d'exécution. Vérifiez / app / tmp / pids / server.pid.
apparaîtrm -f tmp/pids/server.pid