Ruby on Railsでデバッグ
Ruby on Rails (というかRuby?)のリモートデバッグのやり方が最初よくわからなかったのでメモ。
ここに書いてあるのはVSCodeでのデバッグ方法です。
RubyMineとかだとまた違うのかも。
ローカルデバッグ
自分のPC上でサーバー起動してデバッグします。
これは簡単でした。rails newで雛形を作成するとデフォルトでGemfileにdebugが入ってます。
gem "debug", platforms: %i[ mri mingw x64_mingw ]
現在のバージョンは debug (1.8.0) 。
後はlaunch.jsonを以下のようにすればF5でサーバー起動できてデバッグ可能になります。
{
"type": "rdbg",
"name": "Debug Rails",
"request": "launch",
"cwd": "${workspaceRoot}",
"script": "bin/rails server -p 3001",
"args": [],
"askParameters": false,
"useBundler": true,
}
-p 3001 の部分でポート番号をデフォルトの3000から変更できます。
リモートデバッグ
rdbgはリモートデバッグも可能です。
docker等で動作中のRailsにattachできます。
詳細はvscode-rdbgを参照してください。
まずlaunch.jsonを以下のようにします。
{
"type": "rdbg",
"name": "Attach with rdbg",
"request": "attach",
"debugPort": "localhost:12345",
"localfsMap": "/app:${workspaceFolder}"
}
Ruby on RailsのプロジェクトをDockerで動作させます。
この時にrdbgでラップするようにrailsを動かさないといけません。
compose.ymlは以下のようになります。
version: '3.4'
services:
app:
build:
context: .
dockerfile: MyApp.dockerfile
command: bash -c "rm -f tmp/pids/server.pid && bundle install && rdbg -n --open --host 0.0.0.0 --port 12345 -c -- rails server -b 0.0.0.0 -p 3000"
ports:
- 3000:3000
- 12345:12345
volumes:
- .:/app
MyApp.dockerfileは以下です。
FROM ruby:3.2.2
WORKDIR /app
compose.ymlとMyApp.dockerfileはRailsプロジェクトの中に含めてます。
VSCodeから見ると以下のようになってます。
重要なのは以下の部分です。
rdbg -n --open --host 0.0.0.0 --port 12345 -c -- rails server -b 0.0.0.0 -p 3000
単純にRailsを起動したいだけなら以下のようになります。
rails server -b 0.0.0.0 -p 3000
逆に言えば違いはそこだけですね。
後こちらも重要なんですが。
compose.ymlとMyApp.dockerfileは必ずUTF-8で改行コードはLFで保存しましょう、CRLFだとアレがないコレがないと原因不明のエラーに悩まされます。
dockerを起動してからVSCodeのF5を実行すればアタッチされて普通にデバッグすることができます。
docker-compose up
コメント
コメントを投稿