vscode中ruby语言服务和调试可用的核心是正确安装ruby-lsp gem并确保launch.json中type字段匹配:用castwide.ruby-lsp时type必须为"ruby_lsp",用rebornix.ruby时type为"ruby";环境不一致会导致跳转失效、断点灰掉或loaderror。

VSCode 里 Ruby 语言服务和调试能用,核心就两条:ruby-lsp gem 必须装对、launch.json 的 type 字段不能写错。其他所有“跳转失效”“断点灰掉”“LoadError 报满屏”,90% 是这两处没对齐。
ruby-lsp gem 安装失败或静默不工作
只装 VSCode 插件 castwide.ruby-lsp 不起作用,它只是前端,真正干活的是本地 ruby-lsp 可执行文件。常见现象是 Output 面板里 “Ruby LSP” 标签页一直显示 Failed to start language server 或卡在 Indexing...。
- 先确认当前终端的 Ruby 版本和项目一致:
rbenv local 3.2.2(或rvm use 3.2.2),再运行gem install ruby-lsp - 旧版 Ruby(如 2.7 以下)不兼容最新
ruby-lsp,会静默失败;检查gem list ruby-lsp输出的版本号,ruby-lsp0.15+ 要求 Ruby ≥ 3.1 - 项目用了 Bundler?在 VSCode 设置里把
rubyLsp.serverPath改成bundle exec ruby-lsp,否则 LSP 加载不到Gemfile.lock里的依赖 - 子目录打开工作区(比如直接打开
app/controllers)会导致ruby-lsp找不到Gemfile,必须从项目根目录启动 VSCode(code .)
launch.json 中 type 字段写错导致调试器启动即退出
VSCode 调试 Ruby 有两个完全不兼容的后端:type: "Ruby" 对应老插件 rebornix.ruby(已停更),type: "ruby_lsp" 对应新插件 castwide.ruby-lsp。混用必崩,典型错误是断点灰色、控制台报 undefined method `write' for nil:NilClass。
- 用
castwide.ruby-lsp就必须配"type": "ruby_lsp",且删掉所有pathToRDebugIDE、rdebug-ide相关字段 - 用
rebornix.ruby(不推荐)才配"type": "Ruby",但该插件不支持 Ruby 3.1+,调试器会立刻崩溃 - Rails 项目调试服务器,
program字段必须指向可执行脚本,例如"${workspaceFolder}/bin/rails",不能写"rails"—— 后者走系统 PATH,不是bundle exec环境 - 调试单个脚本时,
program推荐写成"ruby ${file}",而不是"${file}",避免因 shebang 或权限问题启动失败
VSCode 终端加载不到 rbenv/rvm,导致 which ruby 输出系统路径
在系统终端里 which ruby 正确,但在 VSCode 集成终端(Ctrl + `)里输出 /usr/bin/ruby,说明 VSCode 启动时根本没读你的 ~/.zshrc 或 ~/.bash_profile。所有后续配置都建立在错误环境上。
- macOS 用户检查
~/.zshrc是否含export PATH="$HOME/.rbenv/bin:$PATH"和eval "$(rbenv init - zsh)";改完后必须Cmd + Q彻底退出 VSCode,再重开 - 在 VSCode 设置中搜
terminal.integrated.env,为对应 shell 补全 PATH,例如 zsh 用户加:"terminal.integrated.env.zsh": {"PATH": "/Users/you/.rbenv/shims:/usr/local/bin:$PATH"} - Windows 用户若用 RubyInstaller,安装时务必勾选
Add Ruby executables to your PATH;否则手动把C:\Ruby32-x64\bin加进系统环境变量,再重启 VSCode - 验证方式:VSCode 集成终端里运行
which ruby和ruby -v,输出必须和系统终端完全一致
最易被忽略的点:VSCode 不会自动继承你终端里 source 过的配置,它靠的是启动时的环境快照。哪怕你在终端里手动 source ~/.zshrc 再开 VSCode,只要没改 terminal.integrated.env 或没彻底重启,集成终端依然跑在裸环境里。











