vs code 中 ruby 开发需统一环境:先解决 rbenv/rvm 路径加载问题,再选用 wingrunr21.vscode-ruby + solargraph 提供语言服务,调试改用 debug gem,bundle exec 需配置 gem_home/gem_path 或启用 ruby.usebundler。

装 Ruby 之前先确认系统里有没有冲突的 rbenv / rvm
很多人装完 ruby 还是被 VS Code 报“command not found”,其实是因为终端里用 rbenv 或 rvm 管理 Ruby,但 VS Code 启动时没加载 shell 配置(比如 ~/.zshrc)。它直接走系统 PATH,结果找到的是 macOS 自带的过期 ruby(2.6),或者压根找不到。
实操建议:
- 在终端里运行
which ruby和ruby -v,记下路径和版本 - 打开 VS Code 终端(
Ctrl+`),再跑一遍which ruby—— 如果结果不一致,说明 VS Code 没读你的 shell 初始化文件 - 在 VS Code 设置里搜
terminal.integrated.env,添加对应 shell 的初始化逻辑,例如 zsh 用户加:"terminal.integrated.env.zsh": { "PATH": "/Users/you/.rbenv/shims:/usr/local/bin:$PATH" }
Ruby 扩展选 rebornix.Ruby 还是 wingrunr21.vscode-ruby
rebornix.Ruby(旧称 “Ruby”)已停更,对 Ruby 3.0+ 的语法高亮、def 参数解构、then 关键字支持弱;wingrunr21.vscode-ruby 虽活跃,但默认用 ruby -c 做语法检查,不兼容 require_relative 路径解析,常报错 LoadError: cannot load such file。
实操建议:
- 装
wingrunr21.vscode-ruby,但关掉它的内置 linter:在设置里把ruby.lint设为空数组"ruby.lint": []
- 改用
solargraph提供完整语言服务(跳转、补全、文档):gem install solargraph
,然后在 VS Code 设置里启用ruby.solexperimental并设ruby.solargraph.autoStart为true - 如果项目用 Bundler,确保
solargraph能读到Gemfile—— 它默认只扫描当前工作区根目录,子目录打开会失效
调试时 launch.json 总连不上断点
VS Code 默认用 ruby-debug-ide + debase,但这两个 gem 在 Ruby 3.1+ 上有兼容问题,常见错误是启动后立刻退出,控制台显示 undefined method `write' for nil:NilClass,或断点灰掉不命中。
实操建议:
- Ruby 3.0+ 必须换用
debuggem(官方维护):bundle add debug --group development
-
launch.json中 type 改成ruby,request 改成launch,program 指向脚本路径,删掉所有ruby-debug-ide-相关字段 - 确保
debuggem 已安装且在当前 bundle 环境中可用:bundle exec ruby -e "require 'debug'; puts 'ok'" - 别用
ruby -Ilib script.rb这种命令式启动 ——debug不识别-I参数,会静默失败
为什么 bundle exec 在 VS Code 终端里有时不生效
不是权限问题,也不是没装 Bundler,而是 VS Code 终端默认不继承登录 shell 的 GEM_HOME/GEM_PATH,尤其当你用 rbenv 时,bundle exec 可能调用的是系统 Ruby 的 Bundler,而不是当前版本的。
实操建议:
- 在 VS Code 设置里加环境变量:
"terminal.integrated.env.zsh": { "GEM_HOME": "/Users/you/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0", "GEM_PATH": "/Users/you/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0" }(路径按rbenv version和gem env输出调整) - 更稳的做法:在项目根目录放
.vscode/settings.json,写"ruby.useBundler": true
,让 Ruby 扩展自动前置bundle exec - 验证是否生效:在 VS Code 终端里运行
which bundle和bundle exec which ruby,两个路径应指向同一 rbenv 版本
最麻烦的其实是路径隔离 —— solargraph、debug、bundle 各自认一套环境变量,差一个字母就罢工。别指望一次配完,得挨个命令验证输出。











