VSCode本身不集成Rails,能否运行取决于启动方式与环境变量是否对齐;必须在终端执行code .以继承rbenv/rvm上下文,否则which ruby错误、gem找不到、断点失效;solargraph需bundle exec solargraph bundle并启用useBundler;ERB文件须映射为erb类型;Rails 7+调试需设autoloader为classic并清除tmp缓存。

VSCode 本身不“集成” Rails,它只是调用你系统里已有的 Ruby、Bundler 和 Rails 命令——所以真正决定能不能跑起来的,是 VSCode 启动方式和环境变量是否对齐。90% 的「Could not find gem」「rails server 启动失败」「断点进不了 model」都源于此。
code . 必须在终端里执行,不能双击图标
VSCode 图形界面启动时不会加载 ~/.zshrc 或 ~/.bashrc,也就读不到 rbenv init 或 rvm reload 注入的 PATH、GEM_HOME、GEM_PATH。结果就是:which ruby 指向 /usr/bin/ruby,bundle exec rails server 报错找不到 gem。
- 永远在项目根目录终端中运行
code .(不是open -a "Visual Studio Code" .,也不是双击文件夹) - 打开后立刻在 VSCode 集成终端中运行
echo $SHELL和which ruby,结果必须跟你在外部终端里一致 - 别在
.vscode/settings.json里硬写"ruby.interpreterPath"指向~/.rbenv/versions/3.2.2/bin/ruby——这会绕过 shim,bundle exec行为异常
solargraph bundle 必须在项目根目录执行,且带 bundle exec
Solargraph 要解析 ActiveRecord::Base、form_with 这类动态方法,必须读取 Gemfile.lock 并索引你项目实际用到的 gems。只装 solargraph gem 不够,不走 Bundler 上下文就等于没加载 Rails。
- 确保已运行
bundle install,且Gemfile.lock存在 - 在项目根目录执行
bundle exec solargraph bundle(不是solargraph bundle) - 检查
.vscode/settings.json是否有"solargraph.useBundler": true - 若补全仍无 Rails 方法,在
.solargraph.yml中加require: ["./config/environment"]
ERB 文件默认当 HTML 解析,Ruby 代码不着色不补全
VSCode 默认把 app/views/layouts/application.html.erb 当作 HTML 处理,里面的 和 完全不被识别——这不是插件没装好,是文件类型映射错了。
- 在工作区
.vscode/settings.json中添加:"files.associations": {"*.html.erb": "erb"} - 改完后必须重载窗口(
Cmd+Shift+P→Developer: Reload Window),仅重启编辑器无效 - erb 语言模式依赖 Ruby 扩展提供底层支持,所以
rebornix.ruby或misaka-10086.ruby必须启用
Rails 7+ 调试断点进不了 app/models?先关 zeitwerk
Rails 7 默认用 :zeitwerk 自动加载,但 debug gem 对它的路径监听不稳定。缓存残留时,断点常跳到错误文件、或直接跳过 app/models。
- 在
config/environments/development.rb中设config.autoloader = :classic - 改完立刻执行
bin/rails tmp:clear,否则 zeitwerk 缓存还在生效 - 调试配置
launch.json的env字段加"RUBY_DEBUG_NO_RAILS": "1"可临时禁用 Rails 集成,验证是否 autoload 干扰 - Gemfile 中只留
gem "debug", group: :development, require: false,删干净所有byebug、pry-byebug、binding.pry
最易被忽略的是:VSCode 启动那一刻的 shell 上下文,决定了之后所有命令的执行基础。改设置、装插件、写配置,全建立在这个前提之上——它不对,后面全白搭。


















