LoginSignup
4
10

More than 5 years have passed since last update.

Visual Studio Code (macOS) で rails を debug 出来ない/ブレークポイントで止まらない問題への対応

Last updated at Posted at 2018-07-20

環境

  • VSCode 1.25.1
  • macOS 10.13.6
  • ruby 5.2.1
  • rails 5.2.0

問題

  • そもそも debug を実行してもエラーになる
  • なんとか debug 実行出来るようになったが、ブレークポイントで止まらない

そもそも debug を実行してもエラーになる

下記2つは Visual Studio CodeでRubyのデバッグをする - Tbpgr Blog が参考になった。

bundle config を変更

  • bundler で生成する bin ファイルの置き場所を ./bin から vendor/bundle/bin に変更
  • bundler のインストール先を vendor/bundle では無くした

結果的に下記のような config になる

.bundle/config
---
BUNDLE_JOBS: "4"
BUNDLE_BIN: "vendor/bundle/bin"

launch.json をリセット

色々なサイトに書いてある方法を試したが、古い書き方だったり、そもそも Terminal で debug-ide を起動しろだったり書いてあるがそれが必要なかった。

まず launch.json を初期化した。

  1. .vscode/launch.json を削除
  2. コマンドパレット⌘+Pから >debug: Open launch.json を実行
  3. 言語選択画面でruby を選択

また、今回は Rails なので、 "useBundler": true オプションを各設定に追加する。

ブレークポイントで止まらない

上記の設定で debug 実行まで行えるようになったが、ブレークポイントで止まらない状態になった。

新規に Rails のプロジェクトを作成して同様に設定してみると、普通に動くので何か原因があるのではないかと探っていると、どうやら spring が悪さをしているよう。

なので、launch.json に今度は env 設定を追加し、spring を動かないようにした。

ただ、同様の設定を行っても rails server ではブレークポイントで止まらない…。

launch.json

その他、不要なファイルパス設定などを削除したりして最終的に出来上がった  launch.json は下記の通り。

.vscode/launch.json
{
  // IntelliSense を使用して利用可能な属性を学べます。
  // 既存の属性の説明をホバーして表示します。
  // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for rdebug-ide",
      "type": "Ruby",
      "request": "attach",
      "cwd": "${workspaceRoot}",
      "remoteHost": "127.0.0.1",
      "remotePort": "1234",
      "remoteWorkspaceRoot": "${workspaceRoot}"
    },
    {
      "name": "Rails server",
      "type": "Ruby",
      "request": "launch",
      "cwd": "${workspaceRoot}",
      "program": "bin/rails",
      "args": [ "server" ],
      "showDebuggerOutput": true,
      "useBundler": true,
      "env": { "DISABLE_SPRING": "1", "RAILS_ENV": "development" }
    },
    {
      "name": "RSpec - all",
      "type": "Ruby",
      "request": "launch",
      "cwd": "${workspaceRoot}",
      "program": "bin/rspec",
      "showDebuggerOutput": true,
      "useBundler": true,
      "env": { "DISABLE_SPRING": "1", "RAILS_ENV": "test" }
    },
    {
      "name": "RSpec - active spec file only",
      "type": "Ruby",
      "request": "launch",
      "cwd": "${workspaceRoot}",
      "program": "bin/rspec",
      "args": [ "-fd", "${file}" ],
      "showDebuggerOutput": true,
      "useBundler": true,
      "env": { "DISABLE_SPRING": "1", "RAILS_ENV": "test" }
    }
  ]
}

ENV管理

直接関係ないが行ったこととして、direnv を利用して Rails で使う環境変数を設定していたのだが、VSCode ではこいつを読む方法がないみたいだったので(昔はenvFileオプションがあったが今は無くなったっぽい)、dotenv-rails gem を利用する方法に切り替えることで対応した。

終わりに

  • Spring が使えないとなると、どうしても実行開始に時間がかかってしまい辛いので、普段はrunning spec files を使って今まで通り binding.pry を使ったほうが便利そう。
  • VSCode の設定情報はオフィシャルの最新情報以外はあまり参考にしない(これは他も同じだけど…
  • この情報もいつ古くなるかわからないので注意してください。
4
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
10