Как не набирать "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). На практике я обнаружил, что они действительно мало чем отличаются от выполнения привычных команд.

Другие вопросы по тегам