Как не набирать "bundle exec", используя Bundler binstubs & chruby?
Я использую chruby для управления версиями Ruby и binstubs в Bundler, чтобы избежать необходимости набирать "bundle exec". Я сталкиваюсь с проблемами, которые не совсем понимаю. Вот что я получаю, когда пытаюсь запустить набор тестов в нашем приложении (Rails 4, Ruby 2.2.2):
$ rspec
/Users/duncanmalashock/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- simplecov (LoadError)
from /Users/duncanmalashock/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /Users/duncanmalashock/ruby_projects/platform/spec/spec_helper.rb:3:in `<top (required)>'
from /Users/duncanmalashock/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /Users/duncanmalashock/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /Users/duncanmalashock/ruby_projects/platform/spec/controllers/admin/admin_controller_spec.rb:1:in `<top (required)>'
from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1327:in `load'
from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1327:in `block in load_spec_files'
from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1325:in `each'
from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1325:in `load_spec_files'
from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:102:in `setup'
from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:88:in `run'
from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:73:in `run'
from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:41:in `invoke'
from /Users/duncanmalashock/.gem/ruby/2.2.2/gems/rspec-core-3.3.2/exe/rspec:4:in `<top (required)>'
from /Users/duncanmalashock/.gem/ruby/2.2.2/bin/rspec:23:in `load'
from /Users/duncanmalashock/.gem/ruby/2.2.2/bin/rspec:23:in `<main>'
Когда я бегу $ bundle exec rspec
пакет работает правильно. Я смотрел в gem_home постмодерна и установил его, но он не дает мне результатов, которые я ищу. Я использую Zsh на OSX Yosemite.
в.zshrc:
source /usr/local/share/chruby/chruby.sh
source '/usr/local/share/chruby/auto.sh'
source /usr/local/share/gem_home/gem_home.sh
export PATH=./.bundle/bin:$PATH
alias b='bundle install --path .bundle/gems --binstubs .bundle/bin'
2 ответа
Просто установите simplecov
драгоценный камень в вашей системе (просто сделайте: gem install simplecov
) и снова запустите тест. Это будет работать.
Но лучше использовать bundle exec
запустить команды rake или rspec. Потому что таким образом, вы должны убедиться, что команда выполняется в контексте вашего Gemfile
,
Вы можете добавить эти псевдонимы в свой .zshrc
файл:
alias ber="bundle exec rspec"
alias be="bundle exec"
И затем запустите ваши тесты rspec, как это:
ber
или же,
be rspec
Ваша проблема в том, что пакет установлен simplecov
локально для проекта, и вы пытаетесь запустить глобальную систему rspec
, Что будет искать simplecov
в системной папке ruby. Использование менеджера версий на языке Ruby не изменит это поведение. Вместо этого он будет использовать расположение библиотеки версионного рубина.
Если вы хотите, чтобы ваш верный Ruby использовал rspec
а также simplecov
вместе тогда нужно установить simplecov
в вашем версионном рубине, используя любой инструмент, эквивалентный gem
это предусмотрено.
Я не уверен, почему вы нашли бег bundle exec
большого значения. Всегда можно создать псевдоним в .bashrc
или же .bash_profile
, У меня есть два для комплекта Exec, один be
и другие bexec
, У меня также есть псевдонимы для bundle exec rails
(brails
) а также bundle exec rake
(break
). На практике я обнаружил, что они действительно мало чем отличаются от выполнения привычных команд.