How do you run and debug Ruby on Rails from Visual Studio Code?
Setup and Launch
- Install the VS Code Ruby plugin (hit ⌘+⇧+P on macOS or ctrl+⇧+P elsewhere and type
ext install
in the prompt, then search forruby
) - Install some required Ruby gems
gem install ruby-debug-ide
gem install debase
- Add a launch configuration in Visual Studio Code (example configuration shown below)
{
"name": "Rails server",
"type": "Ruby",
"request": "launch",
"cwd": "${workspaceRoot}",
"program": "${workspaceRoot}/bin/rails",
"env": {
"PATH": "YOUR_PATH_HERE",
"GEM_HOME": "YOUR_GEM_HOME_HERE",
"GEM_PATH": "YOUR_GEM_PATH_HERE",
"RUBY_VERSION": "YOUR_RUBY_VERSION_HERE"
},
"args": [
"server"
]
}
In some cases you might not need to specify the
env
section. In other cases you can launch VS Code using the CLI (i.e. from the terminal), which on some systems automatically sets the correct environment variables.
- Run!
Troubleshooting
If you get the following error
Debugger terminal error: Process failed: spawn rdebug-ide ENOENT
Your environment variables (env
) are most likely not set and the plugin cannot find the necessary binaries.
- Make sure all gems are installed and try running
bundler install --binstubs
if you use bundler. - Make sure the
env
section is set in your launch configuration. Run the following shell command to generate yourenv
:
printf "\n\"env\": {\n \"PATH\": \"$PATH\",\n \"GEM_HOME\": \"$GEM_HOME\",\n \"GEM_PATH\": \"$GEM_PATH\",\n \"RUBY_VERSION\": \"$RUBY_VERSION\"\n}\n\n"
Windows
Make sure to use the correct spelling (and capitalization) of the path
variable, i.e. Path
on Windows
Sources:
- https://github.com/rubyide/vscode-ruby/issues/214#issuecomment-393111908
- https://www.reddit.com/r/vscode/comments/5w1acs/getting_error_debugger_terminal_error_process/
- How to extend $PATH in launch.json in Visual Studio Code?
I spent most of a day trying to solve this.
I ended up stripping my launch.json config down to the following:
"configurations": [
{
"name": "Rails server",
"type": "Ruby",
"request": "launch",
"cwd": "${workspaceRoot}",
"program": "/Users/mitch/.rvm/gems/ruby-2.3.0@gg_portal/bin/rails",
"args": [
"server"
],
"useBundler": true,
"pathToRDebugIDE": "/Users/mitch/.rvm/gems/ruby-2.3.0@gg_portal/gems/ruby-debug-ide-0.6.1",
"pathToBundler": "/Users/mitch/.rvm/gems/ruby-2.3.0@gg_portal/wrappers/bundle",
"showDebuggerOutput": true
}
]
Firstly, especially if you're using RVM & have different Gemsets, make sure your paths are consistent with the correct Gemset.
What solved the problem for me was pathToBundler.
which bundle
/Users/mitch/.rvm/gems/ruby-2.3.0@gg_portal/bin/bundle
There looks to be some incompatibility around setting the path to the binstubs bundler (shown above) and the bundler pointed to from /wrappers/ (shown below), so changing pathToBundler to:
"pathToBundler": "/Users/mitch/.rvm/gems/ruby-2.3.0@gg_portal/wrappers/bundle",
solved the problem.
There is a kind of related discussion here:
https://github.com/rails/rails/issues/31193
which talks about binstubs though not specifically VSCode & debugging.