Ruby on Railsでデバッグ

Ruby on Railsでデバッグ

Ruby on Rails (というかRuby?)のリモートデバッグのやり方が最初よくわからなかったのでメモ。
ここに書いてあるのはVSCodeでのデバッグ方法です。
RubyMineとかだとまた違うのかも。

Ruby on Rails初心者

ローカルデバッグ

自分の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

コメント

このブログの人気の投稿

(真)ESP32の開発環境をVSCodeで作る

ESP32にmicroSD接続

ESP32でデバッグ