2011-07-12 10 views
3

私はrubyテストを実行するための単純なレーキタスクを定義しましたが、rakeはGemfileで定義されたバージョンのgemをロードしないという問題があります。 Gem::LoadErrorになります。どのような宝石のバージョンを使用するレーキに伝える方法はありますか?ここでRake Tests:Gem Load Error

は、私のシステムにインストールされている宝石です:

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をアンインストールすることで問題を解決できますが、私は他のプロジェクト用にその宝石のバージョンを必要としません。

もう1つの解決策は、rvmジェムセットを使用することです。ただし、指定されたGemfile仕様でレーキを実行することは簡単にできませんか?

bundle exec rake <task> 

また、パーティショニングgemsetsは、インスタンスRVMのgemsetsのために使用して、別のオプションになります...があってはならない:私はブライアンの提案は確かにトリックにすべきだと思う

おかげ

+0

'bundle exec rake 'は動作しますか? – Brian

+0

私は自分のプロジェクトに別々のrvm gemsetsをセットアップしました。今それは働く... – behas

答えて

2

任意のgemバージョンをアンインストールする必要があります。詳細は

bundle install --path=.bundler 

参照http://gembundler.com/man/bundle-install.1.html

別のパーティショニング技術は、に似何かを使用して、内部のプロジェクトディレクトリ(システム宝石としてそれらをインストールではなく)すべての宝石をインストールすることです。この後者の解決方法では、宝石の競合を避けるために、依然としてbundle execというアプローチが必要になることに注意してください。これはRVMのgemsets(http://beginrescueend.com/gemsets/basics/)を使用して、

ピーター

0

を助け

希望はおそらく、プロジェクト間で宝石のバージョンの競合に対処するための最良の方法です。私のシナリオでは、それは動作します...