为什么我需要bundle exec来要求这个rubygem?

时间:2012-04-23 23:55:18

标签: ruby rubygems bundler

我有一个Rails应用程序,在`lib / services'下有一些非Rails相关的文件。其中一个文件使用Domainatrix gem

require "domainatrix"

class SuggestionParser
  # various suggestion parsing methods
end

我在spec/lib下的此文件中有一个空的规范。

require "services/suggestion_parser"

describe SuggestionParser do
end

不幸的是,当我尝试在没有bundle exec的情况下运行该规范时,我遇到了错误:

$: rspec spec/lib/services/suggestion_parser_spec.rb 
-> /Users/davidtuite/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require': cannot load such file -- domainatrix (LoadError)

我的项目中的每个其他规范和gem都将在不使用bundle exec的情况下运行。为什么我需要在这个前面添加前缀?

为方便起见,这里是link to the Domainatrix gemspec

2 个答案:

答案 0 :(得分:2)

我的猜测是,使用Gemfile中的:path:git选项声明了domainatrix,这两个选项都没有以可以访问rubygems的方式安装gem。

如果您从Gemfile发布domainatrix的行,则可以确认。

答案 1 :(得分:0)

尝试运行以下命令:

$ rvm get head && rvm reload
$ chmod +x $rvm_path/hooks/after_cd_bundler
$ bundle install --without production --binstubs=./bundler_stubs

这不能解决宝石的具体问题,但是如果您使用rvm,每次运行测试时都需要输入bundle exec