耙测试:宝石加载错误

时间:2011-07-12 14:09:47

标签: ruby gem rake

我为运行我的ruby测试定义了一个简单的rake任务,但是有一个问题,rake没有加载Gemfile中定义的版本的gem。得到Gem::LoadError。有没有办法告诉rake使用哪个宝石版本?

以下是我系统上安装的宝石:

addressable (2.2.6, 2.2.4)
bundler (1.0.15)
libarchive (0.1.2)
nokogiri (1.5.0)
rake (0.9.2, 0.8.7)
rdf (0.3.3)

这是我的GemFile:

source :rubygems

gem 'nokogiri', '1.5.0'
gem 'rdf', '0.3.3'
gem 'addressable', '2.2.4'
gem 'libarchive', '0.1.2'

这里是rake任务:

require 'rake/testtask'

task :default => [:test]

desc "Run basic tests"
Rake::TestTask.new do |test|
  test.libs << "test"
  test.test_files = Dir["test/test_*.rb"]
  test.verbose = true
end

这是我得到的例外:

/Users/dummy/.rvm/rubies/ruby-1.9.2-head/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:1612:in `raise_if_conflicts': Unable to activate rdf-0.3.3, because addressable-2.2.6 conflicts with addressable (= 2.2.4) (Gem::LoadError)

我可以通过卸载addressable 2.2.6来解决问题,但我需要另一个项目的永久版本的gem。

另一种解决方案可能是使用rvm gemsets。但是不是可以用给定的Gemfile规范运行rake吗?

由于

2 个答案:

答案 0 :(得分:2)

我认为布莱恩的建议确实应该成功:

bundle exec rake <task>

此外,使用例如rvm gemsets对gemsets进行分区将是另一种选择......不应该需要卸载任何gem版本。

另一种分区技术是在项目目录中安装所有宝石 (而不是将它们安装为系统宝石),使用类似于:

的东西
bundle install --path=.bundler

有关详细信息,请参阅http://gembundler.com/man/bundle-install.1.html。请注意,后一种解决方案仍然需要bundle exec方法来避免gem冲突。

希望这有帮助,

彼得

答案 1 :(得分:0)

使用RVM gemsets(http://beginrescueend.com/gemsets/basics/)可能是处理跨项目的gem版本冲突的最佳方法。对于我的场景,它有效......