Ruby 如何不必键入;bundle exec“;使用捆扎机料仓;克鲁比?

Ruby 如何不必键入;bundle exec“;使用捆扎机料仓;克鲁比?,ruby,rspec,bundle,zsh,chruby,Ruby,Rspec,Bundle,Zsh,Chruby,我使用chruby来管理我的Ruby版本,并使用Bundler的binstubs来避免键入“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'

我使用chruby来管理我的Ruby版本,并使用Bundler的binstubs来避免键入“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>'

您的问题是bundler已在项目本地安装了
simplecov
,并且您正在尝试运行系统全局
rspec
。这将在SystemRuby库位置中查找
simplecov
。使用Ruby语言版本管理器不会改变这种行为。它将只使用版本化ruby的库位置

如果您希望您的版本化Ruby同时使用
rspec
simplecov
,那么您需要使用提供的任何与
gem
等效的工具在版本化Ruby中安装
simplecov


我不知道您为什么认为运行
bundle exec
非常重要。可以始终在
.bashrc
.bash\u profile
中创建别名。我有两个bundle exec,一个是
be
,另一个是
bexec
。我还有
bundle exec rails
brails
)和
bundle exec rake
break
)的别名。在实践中,我发现这些命令与运行常规命令几乎没有什么不同

只需在系统中安装
simplecov
gem(只需执行:
gem安装simplecov
),然后再次运行测试。它会起作用的

但是,更好的做法是使用
bundle exec
运行rake或rspec命令。因为这样,您可以确保命令在
Gemfile
的上下文中运行

您可以将这些别名添加到
.zshrc
文件中:

alias ber="bundle exec rspec"
alias be="bundle exec"
然后,像这样运行rspec测试:

ber
或者


邓肯,我的回答有用吗?如果你还有其他问题,请告诉我。
ber
be rspec