sublime text 中 ruby 命令无法运行是因未继承系统 path,需新建 build system 并配置正确路径或使用 bash -l -c 加载 shell 环境;长期服务应改用 terminus 插件而非 build system。

Sublime Text 里 Ruby 命令根本跑不起来?先查 PATH
Sublime Text 默认不继承系统终端的 PATH,所以即使你在 Terminal 里能跑 ruby 或 bundle exec rails s,在 Sublime 的 Build System 里大概率报错:sh: ruby: command not found。
解决方法不是重装 Ruby,而是让 Sublime 知道 Ruby 在哪:
- 在终端运行
which ruby,记下输出路径(比如/opt/homebrew/bin/ruby) - 打开 Sublime → Tools → Build System → New Build System
- 把默认内容替换成(以 macOS Homebrew 安装为例):
{
"shell_cmd": "/opt/homebrew/bin/ruby $file",
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.ruby"
}
Windows 用户请把路径换成类似 C:\Ruby31-x64\bin\ruby.exe,注意双反斜杠;Linux 用户常见路径是 /usr/bin/ruby 或 /home/xxx/.rbenv/versions/3.2.2/bin/ruby。
用 rbenv 或 rvm 管理版本?别硬写死路径
如果你用 rbenv 或 rvm 切换 Ruby 版本,直接在 Build System 里写死 /path/to/ruby 会导致:当前项目用的是 3.1,Build 却调了 3.0 —— 报错或行为不一致。
正确做法是复用 shell 环境,靠 login shell 加载你的 ~/.zshrc 或 ~/.bash_profile:
- 新建 Build System 文件,内容如下(macOS/Linux):
{
"shell_cmd": "bash -l -c 'ruby $file'",
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.ruby"
}
-
bash -l -c表示启动一个登录态 shell,能读到rbenv init或rvm use的配置 - 如果用的是
zsh(macOS Catalina+ 默认),把bash换成zsh - 注意:Windows 不支持此方式,得老实用 RVM for Windows 或直接指定路径
想运行 rails server 或 rspec 怎么配?别用 Build System 硬扛
Build System 本质是单文件执行器,不适合长期运行的服务(如 rails server)或带交互的命令(如 rspec --drb)。强行配进去只会卡住、没输出、关不掉。
更靠谱的替代方案:
- 用
Terminus插件(推荐):安装后 Ctrl+Shift+P → Terminus: Open Default Shell,就能在 Sublime 内建终端里跑rails s、bundle exec rspec,和系统终端完全一致 - 用
SublimeREPL(较老但轻量):适合快速试irb或小段脚本,不推荐跑 Rails 服务 - 别碰「Build with arguments」:Sublime 的 build 参数传递不可靠,
$file_path在多层目录下容易出错,cd $file_path && rails s这类写法极易失败
为什么改完 Build System 还是报错?检查这三处
常见故障点不在 Ruby 本身,而在 Sublime 的上下文隔离:
- Build System 没激活:右下角状态栏要显示你刚保存的 Build 名(比如 “Ruby (rbenv)”),不是 “Automatic” 或 “None”
-
文件没识别为 Ruby:确保右下角显示 “Ruby”,不是 “Plain Text”。可手动点击切换,或保存为
.rb后缀 -
权限或 shebang 干扰:如果脚本开头有
#!/usr/bin/env ruby,而 Build System 又用了bash -l -c,可能因环境变量冲突导致env找不到 ruby —— 此时删掉 shebang 更稳
最麻烦的情况是项目用了 direnv 或自定义 GEM_HOME:Sublime 不加载这些,得在 Build System 里显式导出,比如 "shell_cmd": "bash -l -c 'export GEM_HOME=...; ruby $file'"。这种属于边缘场景,先确认是不是真需要。










