Ruby on Rails:/ bin / sh:rspec:找不到命令
我目前正在阅读Michael Hartl的RoR教程,并且在尝试运行Spork和Guard时陷入了第3章。 当我尝试运行测试时,我得到:
/bin/sh: rspec: command not found
是的,我确实四处寻找答案,但我没有看到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": "" }
sublime插件尝试使用shell /bin/sh
运行命令rspec
。 但是,找不到该命令,因为未在shell的环境中加载RVM。
因此, rspec
可执行文件所在的文件夹不在shell的搜索路径中( PATH
环境变量)。 RVM将gems附带的任何可执行命令安装到某个地方,例如:“/ /home/your-user/.rvm/gems/ruby-1.9.3-p194@myproject/bin/
your-user / /home/your-user/.rvm/gems/ruby-1.9.3-p194@myproject/bin/
gems / ruby- /home/your-user/.rvm/gems/ruby-1.9.3-p194@myproject/bin/
”( 实际路径取决于你的gemset,ruby版本,以及您的OS存储用户主目录的位置 )
简单解决方案
正如这里提到的……您可能会发现只需从包含RVM的shell环境(即:您的项目目录)执行sublime就可以解决PATH
问题。 但是,这要求您每次都从命令行执行文本编辑器,并保留shell的环境。
cd ~/src/my-ruby-project subl .
经过多次实验,我找到了一种方法来强制RubyTest插件使用正确的RVM控制环境执行rspec
( 具有捆绑器支持 )。
借助Bundler支持
这是我的~/.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中安装了bundler,并且RVM安装到您的home目录( 如果~/.rvm
无法正确评估,或者如果bundler
或rvm-auto-ruby
位于某处,则根据需要调整路径)否则 )。
如果您使用的是gemsets,还应该在项目的.rvmrc
文件中添加如下所示的行:
rvm use ruby-1.9.3-p327@your_project_gemset_name
没有Bundler支持
假设您已将cucumber
和rspec
安装到当前 ruby的@global gemset中:
{ "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-settings
文件并将其设置为true
。 这对我有用,没有做任何其他事情。
更新:如果您正在使用PackageControl,则可能需要重新安装RubyTest包,而不仅仅是更新它。
我花了很多时间来解决同样的问题! 我无法使用Michael Hartl“Ruby on Rails Tutorial”在Sublime Text 2中运行rspec。 它不停地说
/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
的Python代码 。
在第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
,我去了Terminal, cd
到我的Rails应用程序目录,然后运行spork
最后,我在Sublime Text 2中打开了static_pages_spec.rb
。现在所有测试都可以使用!
从终端,尝试’gem list -d rspec’。 这应该打印出你名字中有rs / rspec的任何gem。 如果没有,请尝试’gem install rspec’。
假设,从终端,你确实安装了rspec(你可以用“哪个rspec”等来validation),在这种情况下你的问题可能与Sublime的配置方式有关。 请注意安装rspec的路径,并检查编辑器是否在其路径中具有该路径。
(对不起,我特别不熟悉Sublime。)
请参阅Bundler设置: https : //github.com/maltize/sublime-text-2-ruby-tests
关于RubyTest.sublime-settings
,它应该位于sublime-test2 / Packages / RubyTest文件夹中的home文件夹下。 在Ubuntu的情况下,它将是:
~/.config/sublime-text-2/Packages/RubyTest
你需要从工作目录中的终端启动sublime:example – (在终端中转到工作目录,然后从终端启动sublime)
cd rails / my_app_dir
subl。
对于任何使用rbenv的人来说, rubyTest.sublime-settings
也有这个设置可以解决这个问题:
"check_for_rbenv": true
如果您在Mac中安装Ruby时使用了rbenv ,并且在安装“rspec gem”之后运行“rspec”时遇到问题,例如:“-bash:rspec:command not found”,只需输入命令刷新它:
rbenv rehash