Подтвердить что ты не робот

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

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

/bin/sh: rspec: command not found

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

это мой файл Rubytest.sublime.settings в моем user 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": ""
}
4b9b3361

Ответ 1

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

Таким образом, папка, в которой находится ваш исполняемый файл rspec, находится не в пути поиска оболочки (переменная среды PATH). RVM устанавливает любые исполняемые команды, которые поставляются с драгоценными камнями, например: "/home/your-user/.rvm/gems/[email protected]/bin/" (фактический путь зависит от вашего gemset, рубиновой версии и где ваша ОС хранит пользовательские домашние каталоги)

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

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

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

После долгих экспериментов я нашел способ заставить плагин RubyTest выполнить rspec с правильной средой, управляемой RVM (с поддержкой пакета).

Поддержка 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 и RVM установлен в ваш домашний каталог (при необходимости отрегулируйте пути, если ~/.rvm не оценивает правильно, или если bundler или rvm-auto-ruby расположенный где-то в другом месте).

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

rvm use [email protected]_project_gemset_name

Без поддержки Bundler

Предположим, что у вас cucumber и rspec установлены в @global gemset вашего текущего 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": ""
}

Ответ 2

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

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

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

Ответ 3

Я провел много часов, борясь с этой же проблемой! Я не мог заставить rspec работать в Sublime Text 2, используя Michael Hartl "Ruby on Rails Tutorial". Он продолжал говорить

/bin/sh: rspec: command not found

Наконец-то я понял, что пакет RubyTest смотрел в WRONG PLACE для моего 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,

Затем я выкопал в код 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 я перешел в Terminal, cd в каталог приложений Rails и запустил spork

Наконец, я открыл static_pages_spec.rb в Sublime Text 2. Теперь все тесты работают от него!

Ответ 4

Из терминала попробуйте 'gem list -d rspec'. Это должно распечатать любые драгоценные камни, которые у вас есть w/rspec в названии. Если их нет, попробуйте установить gem install rspec.

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

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

Ответ 5

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

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

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

Ответ 6

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

cd rails/my_app_dir
подземелье.

Ответ 7

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

"check_for_rbenv": true

Ответ 8

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

rbenv rehash