【问题标题】:Rake Tests: Gem Load ErrorRake 测试:Gem 加载错误
【发布时间】:2011-07-12 14:09:47
【问题描述】:

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

以下是我系统上安装的 gem:

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 的 never 版本用于另一个项目。

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

谢谢

【问题讨论】:

  • bundle exec rake &lt;task&gt; 工作吗?
  • 我为我的项目设置了不同的 rvm gemsets。现在它可以工作了......

标签: ruby gem rake


【解决方案1】:

我认为布赖恩的建议确实应该中招:

bundle exec rake <task>

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

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

bundle install --path=.bundler

请参阅http://gembundler.com/man/bundle-install.1.html 了解更多信息。请注意,后一种解决方案仍需要使用 bundle exec 方法来避免 gem 冲突。

希望这会有所帮助,

彼得

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-03-20
      • 1970-01-01
      • 2018-12-18
      • 2013-03-04
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 2014-09-21
      • 2018-02-20
      相关资源
      最近更新 更多