13

我目前正在阅读 Michael Hartl 的 RoR 教程,在尝试运行 Spork 和 Guard 时卡在第 3 章。尝试运行测试时,我得到:

/bin/sh: rspec: command not found

是的,我确实四处寻找答案,但我没有看到 RubyTest.sublime.settings 文件在哪里,所以我不知道如何编辑它。谁能帮我解决我的错误?

这是我的用户文件夹中的 Rubytest.sublime.settings 文件

{
  "erb_verify_command": "bundle exec erb -xT - {file_name} | ruby -c",
  "ruby_verify_command": "bundle exec ruby -c {file_name}",

  "run_ruby_unit_command": "bundle exec ruby -Itest {relative_path}",
  "run_single_ruby_unit_command": "bundle exec ruby -Itest {relative_path} -n     '{test_name}'",

  "run_cucumber_command": "bundle exec cucumber {relative_path}",
  "run_single_cucumber_command": "bundle exec cucumber {relative_path} -l{line_number}",

  "run_rspec_command": "bundle exec rspec {relative_path}",
  "run_single_rspec_command": "bundle exec rspec {relative_path} -l{line_number}",

  "ruby_unit_folder": "test",
  "ruby_cucumber_folder": "features",
  "ruby_rspec_folder": "spec",

  "ruby_use_scratch" : false,
  "save_on_run": false,
  "ignored_directories": [".git", "vendor", "tmp"],

  "hide_panel": false,

  "before_callback": "",
  "after_callback": ""
}
4

8 回答 8

18

现在 RubyTest 包有一个名为“check_for_rvm”的配置选项,默认情况下是禁用的。

您可以编辑~/.config/sublime-text-2/Packages/RubyTest/RubyTest.sublime-settings文件并将其设置为true. 这对我有用,而无需做任何其他事情。

更新:如果你使用 PackageControl,你可能需要重新安装 RubyTest 包,而不是仅仅更新它。

于 2013-01-16T12:28:52.477 回答
12

sublime 插件正在尝试rspec使用 shell运行命令/bin/sh。但是,找不到该命令,因为 RVM 未在 shell 环境中加载。

因此,rspec可执行文件所在的文件夹不在 shell 的搜索路径(PATH环境变量)中。RVM 将 gem 附带的任何可执行命令安装到某个地方,例如:“ /home/your-user/.rvm/gems/ruby-1.9.3-p194@myproject/bin/”(实际路径取决于您的 gemset、ruby 版本以及您的操作系统存储用户主目录的位置

简单的解决方案

正如这里提到的......你可能会发现简单地从包含 RVM 的 shell 环境(即:你的项目目录)执行 sublime 可能会解决PATH问题。但是,这要求您每次都从命令行执行文本编辑器,并且保留 shell 的环境。

cd ~/src/my-ruby-project
subl .

经过大量实验后,我找到了一种方法来强制 RubyTest 插件rspec在正确的 RVM 控制环境下执行(支持捆绑程序)。

捆绑器支持

这是我的~/.config/sublime-text-2/Packages/RubyTest/RubyTest.sublime-settings文件的内容:

{
  "erb_verify_command": "~/.rvm/bin/rvm-auto-ruby $(~/.rvm/bin/rvm gemdir | sed -e 's/@.*//' -e 's/$/@global/' )/bin/bundle exec erb -xT - {file_name} | ~/.rvm/bin/rvm-auto-ruby -c",
  "ruby_verify_command": "~/.rvm/bin/rvm-auto-ruby -c {file_name}",

  "run_ruby_unit_command": "~/.rvm/bin/rvm-auto-ruby -Itest {relative_path}",
  "run_single_ruby_unit_command": "~/.rvm/bin/rvm-auto-ruby -Itest {relative_path} -n '{test_name}'",

  "run_cucumber_command": "~/.rvm/bin/rvm-auto-ruby $(~/.rvm/bin/rvm gemdir | sed -e 's/@.*//' -e 's/$/@global/' )/bin/bundle exec cucumber {relative_path}",
  "run_single_cucumber_command": "~/.rvm/bin/rvm-auto-ruby $(~/.rvm/bin/rvm gemdir | sed -e 's/@.*//' -e 's/$/@global/' )/bin/bundle exec cucumber {relative_path} -l{line_number}",

  "run_rspec_command": "~/.rvm/bin/rvm-auto-ruby $(~/.rvm/bin/rvm gemdir | sed -e 's/@.*//' -e 's/$/@global/' )/bin/bundle exec rspec {relative_path}",
  "run_single_rspec_command": "~/.rvm/bin/rvm-auto-ruby $(~/.rvm/bin/rvm gemdir | sed -e 's/@.*//' -e 's/$/@global/' )/bin/bundle exec rspec {relative_path} -l{line_number}",

  "ruby_unit_folder": "test",
  "ruby_cucumber_folder": "features",
  "ruby_rspec_folder": "spec",

  "ruby_use_scratch" : false,
  "save_on_run": false,
  "ignored_directories": [".git", "vendor", "tmp"],

  "hide_panel": false,

  "before_callback": "",
  "after_callback": ""
}

只要您在全局 gemset 中有捆绑程序,并且将 RVM 安装到您的主目录,这应该可以工作(如果评估不正确,或者如果位于其他地方,则根据需要调整路径~/.rvmbundlerrvm-auto-ruby)。

如果您使用 gemsets,您还应该在项目.rvmrc文件中添加如下行:

rvm use ruby-1.9.3-p327@your_project_gemset_name

没有捆绑器支持

这假设您已经安装到cucumber当前ruby​​ 的@global gemset :rspec

{
  "erb_verify_command": "~/.rvm/bin/rvm-exec $(~/.rvm/bin/rvm current) 1>/dev/null erb -xT - {file_name} | ~/.rvm/bin/rvm-auto-ruby -c",
  "ruby_verify_command": "~/.rvm/bin/rvm-auto-ruby -c {file_name}",

  "run_ruby_unit_command": "~/.rvm/bin/rvm-auto-ruby -Itest {relative_path}",
  "run_single_ruby_unit_command": "~/.rvm/bin/rvm-auto-ruby -Itest {relative_path} -n '{test_name}'",

  "run_cucumber_command": "~/.rvm/bin/rvm-auto-ruby $(~/.rvm/bin/rvm gemdir | sed -e 's/@.*//' -e 's/$/@global/' )/bin/cucumber {relative_path}",
  "run_single_cucumber_command": "~/.rvm/bin/rvm-auto-ruby $(~/.rvm/bin/rvm gemdir | sed -e 's/@.*//' -e 's/$/@global/' )/bin/cucumber {relative_path} -l{line_number}",

  "run_rspec_command": "~/.rvm/bin/rvm-auto-ruby $(~/.rvm/bin/rvm gemdir | sed -e 's/@.*//' -e 's/$/@global/' )/bin/rspec {relative_path}",
  "run_single_rspec_command": "~/.rvm/bin/rvm-auto-ruby $(~/.rvm/bin/rvm gemdir | sed -e 's/@.*//' -e 's/$/@global/' )/bin/rspec {relative_path} -l{line_number}",

  "ruby_unit_folder": "test",
  "ruby_cucumber_folder": "features",
  "ruby_rspec_folder": "spec",

  "ruby_use_scratch" : false,
  "save_on_run": false,
  "ignored_directories": [".git", "vendor", "tmp"],

  "hide_panel": false,

  "before_callback": "",
  "after_callback": ""
}
于 2012-11-26T05:29:30.140 回答
5

我花了很多时间来解决同样的问题!使用 Michael Hartl “Ruby on Rails 教程”,我无法让 rspec 在 Sublime Text 2 中运行。它一直在说

/bin/sh: rspec: command not found

我终于意识到RubyTest 包正在为我的 RVM 寻找错误的地方!

在我的 Mac 上,RubyTest 的路径是/Library/Application Support/Sublime Text 2/Packages/Ruby Test

首先,为了让 RubyTest 寻找 RVM,我将参数RubyTest.sublime-settings

"check_for_rvm": false,"check_for_rvm": true,

然后我深入研究了run_ruby_test.py.

在第 151 行,在 BaseRubyTask 类中,我的 RVM 的路径错误:

rvm_cmd = os.path.expanduser('~/.rvm/bin/rvm-auto-ruby')

我将其更改为完整的正确路径:

rvm_cmd = os.path.expanduser('/usr/local/rvm/bin/rvm-auto-ruby')

如果这不是您的路径,请通过键入which rvm-auto-ruby并替换它来找到正确的路径。

保存后run_ruby_test.py,我转到终端,cd到我的 Rails 应用程序目录,然后运行spork

最后,我static_pages_spec.rb在 Sublime Text 2 中打开。现在所有的测试都在它上面工作!

于 2013-03-15T18:35:22.373 回答
0

从终端尝试“gem list -d rspec”。那应该打印出您在名称中带有 rspec 的所有 gem。如果没有,请尝试“gem install rspec”。

假设您确实从终端安装了 rspec(您可以使用“which rspec”等进行验证),在这种情况下,您的问题很可能与 Sublime 的配置方式有关。请注意安装 rspec 的路径,并检查您的编辑器是否在其路径中包含该路径。

(对不起,我特别不熟悉 Sublime。)

于 2012-09-07T20:33:55.590 回答
0

参考 Bundler 设置:https ://github.com/maltize/sublime-text-2-ruby-tests

关于RubyTest.sublime-settings,它应该在您的主文件夹下 sublime-test2/Packages/RubyTest 文件夹中的某个位置。对于 Ubuntu,它将是:

~/.config/sublime-text-2/Packages/RubyTest
于 2012-09-07T20:38:05.380 回答
0

您需要从工作目录中的终端启动 sublime:示例 - (转到终端中的工作目录,然后从终端启动 sublime)

cd rails/my_app_dir
subl 。

于 2013-01-25T04:54:06.640 回答
0

对于任何使用 rbenv 的人,也有这个设置rubyTest.sublime-settings可以解决问题:

"check_for_rbenv": true
于 2014-09-24T17:12:43.770 回答
0

如果您在 Mac 中安装 Ruby 期间使用了 rbenv,并且在安装“rspec gem”后运行“rspec”时遇到问题,例如:“-bash: rspec: command not found”,只需键入命令刷新它:

rbenv rehash
于 2016-04-28T10:37:46.450 回答