🐞
Docker環境のRailsアプリをVSCodeでデバックする
はじめに
Rails7から標準添付された「debug」とVSCode拡張機能「VSCode rdbg Ruby Debugger」を利用してDockerコンテナのRailsアプリをステップ実行でデバッグが出来る環境をつくります。
動作環境
Rails 7 +MySQLのDocker環境構築 で構築した環境を使います。
Ruby 3.2.2
Rails 7.0.8
MySQL 8.0
vscode拡張機能「VSCode rdbg Ruby Debugger」を導入
VSCodeの拡張機能で「rdbg」と検索し「VSCode rdbg Ruby Debugger」をインストール
設定
デバック用に設定を変更します。
compose.ymlの変更
compose.yml
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
TZ: "Asia/Tokyo"
volumes:
- ./db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./db/data:/var/lib/mysql
ports:
- '3306:3306'
restart: always
api:
build:
context: .
dockerfile: ./api/Dockerfile
- command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -e development -p 3000 -b '0.0.0.0'"
+ command: >
+ bash -c "
+ rm -f tmp/pids/server.pid &&
+ rdbg -n --open --host 0.0.0.0 --port 12345 -c -- bundle exec rails s -p 3000 -b '0.0.0.0'
+ "
volumes:
- ./api:/api
ports:
- '3000:3000'
+ - "12345:12345"
depends_on:
- db
stdin_open: true
tty: true
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "rdbg",
"name": "AttachLocal",
"debugPort": "localhost:12345",
"localfsMap": "/:${workspaceFolder}",
"request": "attach",
}
]
}
localfsMap
は, /コンテナ内のパス:${workspaceFolder}
になります。
起動とデバッグ
サーバーを起動してデバッグ
Railsサーバーを起動してデバッガーが12345ポートで待機しているのを確認します。
起動すると ログにDEBUGGER: Debugger can attach via TCP/IP (0.0.0.0:12345)
と出力されます。
VSCodeでデバック
-
①をクリックして【Run and Debug】に移ります。
-
②をクリックしてデバックを実行します。
-
ブレイクポイントを設定してアクセスします
-
curl でアクセスします
curl -X GET http://localhost:3000/api/v1/authors
- 設定したブレイクポイントで止まるので、操作バーで処理を進めます。( Debug actions )
-
VARLABLES
などで変数を確認できます。
Discussion