Sublime Text 运行 Ruby 报 command not found: ruby 的根本原因是构建系统不继承 shell 环境的 PATH;需手动配置 Ruby 路径、Bundler 支持及 UTF-8 编码,且无法自动检测 Gemfile,建议分设纯 Ruby 与 Bundle 构建系统。

Sublime Text 运行 Ruby 报 command not found: ruby
根本原因是 Sublime 的构建系统默认不继承你的 shell 环境(比如 zsh 或 bash 的 $PATH),所以即使终端里能跑 ruby --version,Sublime 也找不到 ruby 可执行文件。
实操建议:
- 先在终端运行
which ruby,记下输出路径,例如/opt/homebrew/bin/ruby或/usr/local/bin/ruby - 打开 Sublime → Tools → Build System → New Build System,粘贴以下内容(把
/your/path/to/ruby换成你自己的路径):
{
"shell_cmd": "/your/path/to/ruby \"${file}\"",
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.ruby",
"encoding": "UTF-8"
}
保存为 Ruby.sublime-build,然后手动选中它(Tools → Build System → Ruby)。
用 Bundler 管理 gem 时,require 报错找不到本地 gem
Sublime 默认只调用裸 ruby,不走 bundle exec,所以即使项目有 Gemfile,require 'rspec' 这类语句也会失败。
实操建议:
- 修改刚才的
Ruby.sublime-build,把shell_cmd换成:
"shell_cmd": "cd \"${file_path}\" && bundle exec ruby \"${file}\""
注意:&& 前后不能有空格,否则 Windows 不兼容;Mac/Linux 可用,Windows 用户得换 &(单个)或改用批处理封装。
- 如果项目没装 Bundler,或不想强依赖
bundle exec,就别加这层——否则一开文件就报Could not locate Gemfile
中文输出乱码(尤其 Windows + Ruby 3.x)
Ruby 3 默认用 UTF-8,但 Windows 控制台常是 GBK 编码,Sublime 构建面板又直接捕获 stdout,结果中文全变问号或异常字符。
实操建议:
- 最稳方案:在 Ruby 脚本开头加
$stdout.set_encoding('UTF-8')(仅对输出生效) - 临时绕过:把构建命令改成
ruby -EUTF-8:GBK \"${file}\",让 Ruby 强制以 GBK 解码输入、UTF-8 输出(适合简单脚本) - 别碰 Sublime 的
encoding字段——它只控制文件读取编码,不影响运行时终端行为
想自动检测当前目录有没有 Gemfile 再决定是否用 bundle exec
Sublime 的构建系统不支持条件判断,没法像 shell 那样写 if [ -f Gemfile ]; then ...。硬要“智能”反而容易出错。
实操建议:
- 老实用两个独立的构建系统:
Ruby.sublime-build(纯 ruby)和Ruby-Bundle.sublime-build(带bundler),按需切换 - 或者统一用
bundler版本——只要项目根目录没Gemfile,bundle exec会直接报错退出,不影响调试;你一眼就能看出该不该配 Bundler - 别试图用 Python 插件做动态构建——Sublime 的
exec类插件在构建流程中不可靠,容易卡死或丢输出
环境变量、路径、编码、执行上下文——这四个点串起来才是真实可用的 Ruby 构建链。少一个,就卡在“明明终端能跑,Sublime 就不行”。









