如何使用 Bundler binstubs & chruby 不必输入 "bundle exec"?
How not to have to type "bundle exec" using Bundler binstubs & 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': 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,并安装了它,但它没有给我想要的结果。我在 OSX Yosemite.
上使用 zsh
在 .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'
您的问题是捆绑程序已在项目本地安装 simplecov
,而您正在尝试 运行 系统全局 rspec
。那就是要在系统 ruby 库位置中寻找 simplecov
。使用 Ruby 语言版本管理器不会改变这种行为。它只会使用版本化 ruby 的库位置。
如果您希望您的版本 Ruby 同时使用 rspec
和 simplecov
那么您需要使用任何工具在您的版本 ruby 中安装 simplecov
相当于提供的gem
。
我不确定为什么您觉得 运行ning bundle exec
很重要。人们总是可以在 .bashrc
或 .bash_profile
中创建一个别名。我有两个用于 bundle exec,一个是 be
,另一个是 bexec
。我还有 bundle exec rails
(brails
) 和 bundle exec rake
(break
) 的别名。在实践中,我发现这些与 运行ning 常规命令确实没有什么不同。
只需在您的系统中安装 simplecov
gem(只需执行:gem install simplecov
)并再次 运行 您的测试。它会起作用。
但是,更好的做法是使用 bundle exec
到 运行 rake 或 rspec 命令。因为这样,您将确保命令在 Gemfile
.
的上下文中 运行ning
您可以将这些别名添加到您的 .zshrc
文件中:
alias ber="bundle exec rspec"
alias be="bundle exec"
然后 运行 你的 rspec 测试如下:
ber
或者,
be rspec
我正在使用 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>'
当我 运行 $ bundle exec rspec
时,套件 运行 正确。我一直在研究后现代的 gem_home,并安装了它,但它没有给我想要的结果。我在 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'
您的问题是捆绑程序已在项目本地安装 simplecov
,而您正在尝试 运行 系统全局 rspec
。那就是要在系统 ruby 库位置中寻找 simplecov
。使用 Ruby 语言版本管理器不会改变这种行为。它只会使用版本化 ruby 的库位置。
如果您希望您的版本 Ruby 同时使用 rspec
和 simplecov
那么您需要使用任何工具在您的版本 ruby 中安装 simplecov
相当于提供的gem
。
我不确定为什么您觉得 运行ning bundle exec
很重要。人们总是可以在 .bashrc
或 .bash_profile
中创建一个别名。我有两个用于 bundle exec,一个是 be
,另一个是 bexec
。我还有 bundle exec rails
(brails
) 和 bundle exec rake
(break
) 的别名。在实践中,我发现这些与 运行ning 常规命令确实没有什么不同。
只需在您的系统中安装 simplecov
gem(只需执行:gem install simplecov
)并再次 运行 您的测试。它会起作用。
但是,更好的做法是使用 bundle exec
到 运行 rake 或 rspec 命令。因为这样,您将确保命令在 Gemfile
.
您可以将这些别名添加到您的 .zshrc
文件中:
alias ber="bundle exec rspec"
alias be="bundle exec"
然后 运行 你的 rspec 测试如下:
ber
或者,
be rspec