Ruby on rails RubyonRails:/bin/sh:rspec:未找到命令

Ruby on rails RubyonRails:/bin/sh:rspec:未找到命令,ruby-on-rails,ruby,sublimetext2,Ruby On Rails,Ruby,Sublimetext2,我目前正在学习迈克尔·哈特尔的RoR教程,当我试着运行斯波克和守卫时,我被困在了第三章。尝试运行测试时,我得到: /bin/sh:rspec:command未找到 是的,我确实四处寻找答案,但我没有看到RubyTest.sublime.settings文件在哪里,所以我不知道如何编辑它。有人能帮我解决我的错误吗 这是我的用户fodler中的Rubytest.sublime.settings文件 { "erb_verify_command": "bundle exec erb -xT - {f

我目前正在学习迈克尔·哈特尔的RoR教程,当我试着运行斯波克和守卫时,我被困在了第三章。尝试运行测试时,我得到:

/bin/sh:rspec:command未找到

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

这是我的用户fodler中的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": ""
}

在终端上,尝试“gem list-d rspec”。那就可以打印出你名字里的任何宝石了。如果没有,请尝试“gem install rspec”

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


(对不起,我不太熟悉Sublime。)

请参阅捆绑机设置:

关于
RubyTest.sublime设置
,它应该位于sublime-test2/Packages/RubyTest文件夹中的主文件夹下。就Ubuntu而言,它将是:

~/.config/sublime-text-2/Packages/RubyTest

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

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

简单解 如前所述。。。您可能会发现,只需在包含RVM(即:您的项目目录)的shell环境中执行sublime,就可以解决路径问题。但是,这要求每次都从命令行执行文本编辑器,并保留shell的环境

cd ~/src/my-ruby-project
subl .
经过多次实验,我找到了一种方法,可以强制RubyTest插件在正确的RVM控制环境下执行
rspec
,并支持捆绑包)

与捆绑机支持 以下是我的
~/.config/sublime-text-2/Packages/RubyTest/RubyTest.sublime设置文件的内容:

{
  "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": ""
}
rvm use ruby-1.9.3-p327@your_project_gemset_name
只要您的全局gemset中有bundler,并且在home dir中安装了RVM(如果
~/.RVM
计算不正确,或者
bundler
RVM auto ruby
位于其他地方,则根据需要调整路径),这项功能就可以正常工作

如果您使用的是Gemset,还应在项目的
.rvmrc
文件中添加一行,如下所示:

{
  "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": ""
}
rvm use ruby-1.9.3-p327@your_project_gemset_name
没有绑定器支持 这假设您已将
cucumber
rspec
安装到当前ruby的@globalgemset:

{
  "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": ""
}

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

您可以编辑
~/.config/sublime-text-2/Packages/RubyTest/RubyTest.sublime设置
文件并将其设置为
true
。这对我来说很有效,没有做任何其他事情


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

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

cd-rails/my_应用程序目录

subl.

我花了很多时间来解决这个问题!我无法使用MichaelHartl的“RubyonRails教程”让rspec在Sublime文本2中运行,它一直在说

/bin/sh: rspec: command not found
我终于意识到我的RVM找错了地方

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

首先,为了让RubyTest搜索RVM,我更改了
RubyTest.sublime settings
中的参数

“检查rvm”:错误,
“检查rvm”:正确,

然后我挖了进去

在第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\u ruby\u test.py
后,我转到终端,
cd
到我的Rails应用程序目录,然后运行
spork


最后,我在Sublime Text 2中打开了
static\u pages\u spec.rb
。现在所有的测试都从它开始

对于任何使用rbenv的人,rubyTest.sublime settings中也有此设置,它将实现以下功能:

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

rbenv rehash

您是否通过rvm或您正在使用的任何工具安装rspec?您是否使用Sublime Text 2运行测试?@DaveNewton我相信我是通过rvm安装的(但不确定。我知道我的系统上安装了rvm)。我正在使用sublime text 2,我正在使用终端打开我的应用程序
subl.
。您认为这是$PATH问题吗?您是否在shell的启动脚本中执行RVMShell命令?您是否使用了合适的gemset?它应该尝试执行gemset的rvm。如果您是从ST2运行的,您需要将其设置为运行适当的RSpec,但不确定如何为RSpec执行该操作;使用正确的Ruby很容易。现在,我将
/bin/sh:bundle:command not found
复制
RubyTest.sublime设置
文件到用户文件夹,然后添加
bundle exec后,得到了
/bin:bundle:command not found