2011-07-12 73 views
3

我定義了一個簡單的rake任務來運行我的ruby測試,但問題是rake沒有加載Gemfile中定義的版本的gem。它得到一個Gem::LoadError。有沒有辦法告訴耙子使用哪個寶石版本?耙測試:寶石加載錯誤

這裏是安裝在我的系統上的寶石:

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?

感謝

+0

'捆綁EXPR耙'工作嗎? – Brian

+0

我爲我的項目設置了不同的rvm gemsets。現在它工作... – behas

回答

2

我覺得布萊恩的建議的確應該給招:

bundle exec rake <task> 

此外,分區gemsets,例如使用RVM gemsets,將是另一種選擇......不應該有一個需要卸載任何寶石版本。

另一個分區技術將安裝所有的寶石項目目錄(而不是安裝它們作爲系統的寶石),使用一個類似於:

bundle install --path=.bundler 

更多信息,請參見http://gembundler.com/man/bundle-install.1.html。請注意,後一種解決方案仍然需要使用bundle exec方法來避免創業板衝突。

希望這有助於利用RVM gemsets

彼得

0

(http://beginrescueend.com/gemsets/basics/)可能是應對跨項目寶石版本衝突的最佳途徑。對於我的情況下,它的工作原理...