必须用终端执行 code . 打开 vscode,否则无法继承 rbenv/rvm 环境;rails 7+ 调试需设 config.autoloader = :classic 并执行 bin/rails tmp:clear;solargraph 必须运行 bundle exec solargraph bundle 且配置 usebundler。

code . 必须在终端里执行,否则 VSCode 根本看不到你的 rbenv 或 rvm 环境 —— 这是 90% 的“Could not find gem”和“rails server 启动失败”的根源。
为什么 ruby -v 和 which ruby 在 VSCode 集成终端里不对
VSCode 图形界面启动时不会加载你的 shell 配置(比如 ~/.zshrc),所以 GEM_HOME、GEM_PATH、PATH 全都丢了。集成终端只是“长得像 zsh”,实际没继承上下文。
- 永远用终端进入项目目录后,运行
code .(不是双击图标,也不是open -a "Visual Studio Code" .) - 打开后,在集成终端里立刻执行
echo $SHELL和which ruby,确认跟你在项目根目录手动敲的完全一致 - 别在
.vscode/settings.json里硬写"ruby.interpreterPath"指向~/.rbenv/versions/3.2.2/bin/ruby—— 这会绕过 shim,导致bundle exec行为异常
调试断点进不了 app/models 怎么办
Rails 7+ 默认用 :zeitwerk 自动加载,但 debug gem 对它的路径监听不稳定,断点常被跳过或错位。
- 在
config/environments/development.rb中强制设为经典模式:config.autoloader = :classic - 改完立刻在终端执行
bin/rails tmp:clear—— zeitwerk 缓存不清理,重启 VSCode 也没用 - 如果仍无效,在
launch.json的env字段加"RUBY_DEBUG_NO_RAILS": "1",临时禁用 Rails 集成;能进模型说明就是 autoload 干扰 - 确保
Gemfile里只有gem "debug", group: :development, require: false,删干净所有byebug、pry-byebug、binding.pry
solargraph bundle 执行了却没补全、跳转失效
Solargraph 不读 Gemfile.lock 就没法知道你用了哪些 gems,更没法解析 ActiveRecord::Base 或 form_with 这类动态方法。
- 必须在项目根目录运行
bundle exec solargraph bundle(不是solargraph bundle),否则它索引的是全局 gem,不是你项目的 - 检查
.vscode/settings.json是否有"solargraph.useBundler": true - 在
.solargraph.yml里显式requireRails 核心组件,例如:require: ["./config/environment"] - ERB 文件默认当 HTML 解析,得在设置里加:
"files.associations": {"*.html.erb": "erb"}
rake 报 “Don't know how to build task”
这不是任务名错了,是 rake 命令根本没加载 Rails 上下文 —— 它不知道自己在 Rails 项目里跑。
-
rake不自动读RAILS_ENV,必须显式传参,比如rake db:migrate RAILS_ENV=development -
bundle exec rake依赖BUNDLE_GEMFILE环境变量定位Gemfile,VSCode 终端若没继承该变量就会失败 - 推荐直接用
bin/rails替代:比如bin/rails db:migrate、bin/rails console,它自带环境初始化 - 如需定义快捷任务,在
.vscode/tasks.json里用command:"${workspaceFolder}/bin/rails",args:["db:migrate"]
tmp:clear 和 code . 这两步,漏掉一个,后面所有配置都白搭。











