Sublime Text 本身不管理 Ruby 依赖,require 失败主因是 GUI 启动未继承 GEM_HOME/GEM_PATH/PATH;需通过控制台验证环境变量,macOS/Linux 用 zsh -l -c + bundle exec,Windows 需硬编码 ruby.exe 和 bundle.bat 路径。

Sublime Text 本身不管理 Ruby 依赖,bundle install、gem 或 Bundler 的行为完全由你系统里的 Ruby 环境决定;项目中能否正确加载 require 的 gem,只取决于 Sublime 启动时能否继承到正确的 GEM_HOME、GEM_PATH 和 PATH——而 GUI 启动的 Sublime 默认不读你的 shell 配置,所以即使终端里 bundle exec ruby script.rb 能跑,Sublime 按 Ctrl+B 仍可能报 cannot load such file -- xxx。
验证 Sublime 是否看到你的 Bundler 环境
别猜,直接看它实际加载的环境变量:
按 Ctrl+` 打开 Sublime 控制台,依次执行:
import os; print(os.environ.get('PATH'))import os; print(os.environ.get('GEM_HOME'))import os; print(os.environ.get('GEM_PATH'))检查输出是否包含:
-
/Users/xxx/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0(rbenv) -
/Users/xxx/.rvm/gems/ruby-3.2.2@myapp(rvm) -
C:Ruby32-x64lib ubygems.2.0(Windows)
如果 GEM_HOME 或 GEM_PATH 是空的,或路径明显不对,说明 Sublime 根本没继承 Bundler 上下文——后续所有 require 失败都源于此。
macOS/Linux:用登录态 shell 加载 rbenv/rvm + bundle exec
裸写 "shell_cmd": "ruby $file" 会跳过所有版本和 gemset 隔离;必须让 shell 初始化逻辑生效,并显式走 bundle exec:
在 Tools → Build System → New Build System… 中粘贴:
{
"shell_cmd": "zsh -l -c "cd '$folder' && bundle exec ruby '$file'"",
"file_regex": "^([^:]*):([0-9]+):?([0-9]*):? (.*)$",
"selector": "source.ruby",
"encoding": "utf-8"
}关键点:
-
zsh -l -c触发登录态,自动 source~/.zshrc,rbenv/rvm 才能识别当前目录的.ruby-version和.ruby-gemset -
cd '$folder'确保bundle exec在项目根目录运行,否则找不到Gemfile - 路径含空格也不怕,单引号包裹
$folder和$file是安全写法
Windows:必须硬编码 ruby.exe + bundle.bat 全路径
Windows 不支持 zsh -l -c,也不能靠环境变量自动定位 bundle;必须写死两个路径:
确认以下两处存在:
-
ruby.exe:如C:Ruby32-x64in uby.exe -
bundle.bat:如C:Ruby32-x64inundle.bat(不是bundle,Windows 下是 .bat 文件)
构建系统配置示例:
{
"cmd": ["C:\Ruby32-x64\bin\ruby.exe", "-S", "C:\Ruby32-x64\bin\bundle.bat", "exec", "ruby", "$file"],
"file_regex": "^([^:]*):([0-9]+):?([0-9]*):? (.*)$",
"selector": "source.ruby",
"working_dir": "$folder"
}注意:
- 反斜杠必须双写(
\),否则 JSON 解析失败 -
-S参数让 ruby 自动在PATH中找bundle.bat,但这里我们绕过 PATH 直接调用,更可靠 -
working_dir强制工作目录为项目根,bundle exec才能读到Gemfile
为什么 require 'sinatra' 还是报错?检查这三处
即使构建系统能跑,require 仍失败,大概率卡在这三个地方:
-
项目没执行过
bundle install:Sublime 不会帮你装 gem,必须先在终端进项目目录手动运行 -
Gemfile里用了path或git源,但本地路径不存在或 clone 失败:运行bundle list看是否所有 gem 都 resolve 成功 -
Sublime 没读
.env或.ruby-version:GUI 启动不加载这些文件,必须靠zsh -l -c或硬编码路径来兜底
最易被忽略的是:Sublime 的构建系统只控制「如何运行」,不控制「运行时上下文是否完整」——bundle exec 是桥梁,但桥那头的 gem 环境,得你自己先搭好、再验证清楚。


















