Ruby on Rails: /bin/sh: rspec: команда не найдена

В настоящее время я просматриваю учебник Майкла Хартла по RoR и застреваю в главе 3, пытаясь запустить Spork и Guard. При попытке запустить тесты получаю:

/bin/sh: rspec: command not found

Да, я поискал ответ, но не вижу, где находится файл RubyTest.sublime.settings, поэтому не знаю, как его редактировать. Может ли кто-нибудь помочь мне, как исправить мою ошибку?

это мой файл Rubytest.sublime.settings в моем пользовательском fodler

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

person bigpotato    schedule 07.09.2012    source источник
comment
Вы установили rspec через rvm или что-то еще? Вы используете Sublime Text 2 для запуска тестов?   -  person Dave Newton    schedule 08.09.2012
comment
@DaveNewton Кажется, я установил его через rvm (но не уверен. Хотя я знаю, что rvm установлен в моей системе). Я использую возвышенный текст 2 и использую терминал, чтобы открыть свое приложение subl .. Как вы думаете, это проблема $ PATH?   -  person bigpotato    schedule 08.09.2012
comment
Выполняете ли вы команду оболочки rvm в сценарии запуска вашей оболочки? Используете ли вы соответствующий набор драгоценных камней? Он должен пытаться выполнить rvm набора драгоценных камней. Если вы работаете из ST2, вам нужно настроить его для запуска соответствующего RSpec, но не знаете, как это сделать для rspec; заставить его использовать правильный Ruby легко.   -  person Dave Newton    schedule 08.09.2012


Ответы (8)


Плагин возвышенного пытается запустить команду rspec с помощью оболочки /bin/sh. Однако команда не найдена, поскольку RVM не загружен в среде оболочки.

Таким образом, папка, в которой находится исполняемый файл rspec, отсутствует в пути поиска оболочки (переменная среды PATH). RVM устанавливает все исполняемые команды, поставляемые с гемами, в какое-то место, например: "/home/your-user/.rvm/gems/ruby-1.9.3-p194@myproject/bin/" (фактический путь зависит от вашего гемсета, версии ruby ​​и места, где ваша ОС хранит домашние каталоги пользователей)

Простое решение

Как упоминалось здесь... вы можете обнаружить, что простое выполнение возвышенного из среды оболочки, содержащей RVM (т.е. каталог вашего проекта) может решить проблему PATH. Однако для этого необходимо каждый раз запускать текстовый редактор из командной строки и сохранять среду оболочки.

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

Это должно работать до тех пор, пока у вас есть сборщик в вашем глобальном наборе драгоценных камней и RVM, установленный в вашем домашнем каталоге (при необходимости отрегулируйте пути, если ~/.rvm оценивается неправильно или если bundler или rvm-auto-ruby находится где-то еще).

Если вы используете наборы драгоценных камней, вы также должны добавить следующую строку в файл .rvmrc вашего проекта:

rvm use ruby-1.9.3-p327@your_project_gemset_name

Без поддержки бандлера

Это предполагает, что вы установили cucumber и rspec в гемсет @global вашего текущего ruby:

{
  "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": ""
}
person TrinitronX    schedule 26.11.2012

Теперь в пакете RubyTest есть параметр конфигурации «check_for_rvm», который по умолчанию отключен.

Вы можете отредактировать файл ~/.config/sublime-text-2/Packages/RubyTest/RubyTest.sublime-settings и установить для него значение true. Это сработало для меня, не делая ничего другого.

Обновление. Если вы используете PackageControl, вам может потребоваться переустановить пакет RubyTest, а не просто обновить его.

person Fer    schedule 16.01.2013
comment
У меня работало, но мне пришлось обновить свой RubyTest и переустановить его с помощью Package Control. Спасибо - person Lars Schirrmeister; 16.01.2013
comment
У меня сработало, самое простое решение. - person Dreyfuzz; 13.05.2013
comment
А для тех, кто использует rbenv вместо rvm, измените настройку check_for_rbenv на true. - person sirentian; 22.09.2013

Я провел много часов, борясь с этой же проблемой! Я не смог заставить rspec работать в Sublime Text 2, используя «Учебник по Ruby on Rails» Майкла Хартла. Он продолжал говорить

/bin/sh: rspec: command not found

Наконец-то я понял, что пакет RubyTest искал не в том месте мой РВМ!

На моем Mac путь для RubyTest — /Library/Application Support/Sublime Text 2/Packages/Ruby Test

Во-первых, чтобы заставить RubyTest искать RVM, я изменил параметр в RubyTest.sublime-settings с

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

Затем я изучил код Python для 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. Теперь все тесты работают из него!

person Raymond Gan    schedule 15.03.2013
comment
Мне нужно было изменить check_for_rvm, но не rvm_cmd, так как он присутствовал в исходном месте. - person Ian Dundas; 17.09.2013

В терминале попробуйте «список драгоценных камней -d rspec». Это должно распечатать все драгоценные камни, которые у вас есть с rspec в имени. Если их нет, попробуйте «gem install rspec».

Предполагая, что с терминала у вас установлен rspec (что вы можете проверить с помощью «какой rspec» и т. д.), в этом случае ваша проблема, вероятно, связана с настройкой Sublime. Обратите внимание на путь, по которому установлен rspec, и проверьте, есть ли он в пути вашего редактора.

(Извините, я не знаком с Sublime в частности.)

person Benissimo    schedule 07.09.2012

Обратитесь к настройкам Bundler: https://github.com/maltize/sublime-text-2-ruby-tests

Что касается RubyTest.sublime-settings, он должен находиться в вашей домашней папке где-то в папке sublime-test2/Packages/RubyTest. В случае Ubuntu это будет:

~/.config/sublime-text-2/Packages/RubyTest
person prusswan    schedule 07.09.2012
comment
Привет. теперь я получаю /bin/sh: bundle: command not found после копирования файла RubyTest.sublime-settings в папку пользователя и последующего добавления bundle exec к каждой команде. - person bigpotato; 08.09.2012
comment
@ Эдмунд, вы следовали рекомендациям книги по настройке rvm? Вы можете выполнить bundle exec rspec spec в окне терминала? - person prusswan; 08.09.2012
comment
@ Эдмунд, это было бы необычно, поскольку вы уже начинаете с subl, возможно, это будет полезно: github.com/maltize/sublime-text-2-ruby-tests/issues/75 - person prusswan; 08.09.2012

Вам нужно запустить возвышенное из терминала в рабочем каталоге: пример - (перейдите в рабочий каталог в терминале, затем запустите возвышенное из терминала)

cd rails/my_app_dir
subl .

person Robert Karlsson    schedule 25.01.2013

Для тех, кто использует rbenv, в rubyTest.sublime-settings также есть этот параметр, который поможет:

"check_for_rbenv": true
person Ben    schedule 24.09.2014

если вы использовали rbenv во время установки Ruby на Mac и у вас возникла проблема с запуском "rspec" после установки " rspec gem», например: «-bash: rspec: команда не найдена», просто обновите его, набрав команду:

rbenv rehash
person sambua    schedule 28.04.2016