vscode中bundle install没反应或报错,主因是集成终端未加载shell配置导致ruby环境错位;需确保which ruby和bundle -v在内外终端输出一致且路径含.rbenv/shims或.rvm/rubies,macos用户应将rbenv init加至~/.zprofile并配置zsh为login shell,windows用户须从msys2终端启动vscode。

VSCode里bundle install没反应或报错,先看终端环境对不对
VSCode集成终端默认不加载~/.zshrc或~/.bash_profile,所以which ruby和which bundle很可能指向系统 Ruby(比如/usr/bin/ruby),而不是你用rbenv或rvm装的版本。这种情况下bundle install会失败、卡住,或装到错误位置。
验证方法:ruby -v和bundle -v在外部终端和 VSCode 集成终端中输出必须完全一致,且路径要含.rbenv/shims或.rvm/rubies。
- macOS zsh 用户:把
rbenv init输出的eval "$(/opt/homebrew/bin/brew prefix rbenv)/libexec/..."加到~/.zprofile(不是~/.zshrc) - VSCode 设置中搜
terminal.integrated.profiles.zsh,把args改成["-i", "-l"],强制走 login shell - Windows + msys2 用户:必须从 msys2 终端执行
code .启动 VSCode,不能双击图标
Gemfile改了但bundle install不更新,锁文件没动是常见原因
Gemfile.lock是 Bundler 的“事实来源”,只要它存在且没冲突,bundle install就只按锁文件装,不会重新解析依赖或升级版本——哪怕你在Gemfile里改了gem 'rails', '~> 7.1'。
想让改动生效,得明确告诉 Bundler 重算:
- 加新 gem 或改版本后,运行
bundle update rails(只更新指定 gem) - 想全量重算所有依赖(慎用),运行
bundle update,但会忽略Gemfile.lock里的约束,可能引入意外变更 - 删掉
Gemfile.lock再bundle install也行,但等价于bundle update,不推荐用于生产项目
注意:bundle install本身不修改Gemfile.lock,除非有未满足的依赖;bundle update一定会写新锁文件。
VSCode里调试时require 'debug'报错,本质是gem没进bundle上下文
很多 Ruby 3.1+ 用户在 VSCode 里按 F5 调试,断点不命中、控制台直接退出,根本原因是:调试器用的是全局 Ruby 环境,而debug gem 只装在项目 bundle 里,或者根本没装。
正确做法只有这一种:
- 确保
Gemfile的:development组里有gem "debug", require: false - 运行
bundle install(不是gem install debug) - 在 VSCode 集成终端里手动验证:
bundle exec ruby -e "require 'debug'; puts 'ok'",输出ok才算到位 - VSCode 调试配置
launch.json里必须用"program": "${workspaceFolder}/main.rb",且"console": "integratedTerminal",让bundle exec能接管
别碰ruby-debug-ide或debase——它们在 Ruby 3.1+ 已彻底失效,VSCode 插件装了也没用。
扩展装多了反而破坏Bundler行为,只留这三个就够了
VSCode 插件市场搜“ruby”,出来一堆扩展,但多数已停更、抢端口、覆盖设置。尤其rebornix.ruby(旧版 LSP)、ruby-solargraph(已弃用)、shawncarter.rails-run-specs,装上就会让bundle exec失效、跳转找不到 gem 内部方法、甚至bundle add命令被拦截。
目前唯一稳定组合是:
-
castwide.ruby-lsp:自动探测Gemfile,用bundle exec跑语言服务,支持 Ruby 3.2+ 新语法 -
misogi.ruby-debug-ide:仅作前端,真·调试器靠debuggem,它只负责传参 -
ruby-rubocop:检查依赖是否在Gemfile里声明(比如require 'rspec'但没bundle add rspec)
删掉所有带solargraph、ruby-test、rails字样的扩展,关掉ruby.interpreterPath这类手动路径配置——Bundler 的意义,就是不让任何地方硬编码 Ruby 路径。











