2009-07-11 118 views
6

如何確定使用哪個rubygem來響應「require」語句?這似乎沒有幫助的寶石。確定您正在使用哪個rubygem

背景:對於項目hornsby-herbarium解析器,我使用的是寶石roo。

我使用了github gem hmcgowan-roo,因爲那時它比roy的rubyforge版本更新。我試着在runco​​derun上測試代碼,但它失敗了,因爲它沒有任何版本的roo。此時,github和rubyforge都可以使用新版本的roo。

我決定不妨看看rubyforge的最新版本是否適用於我的代碼,因爲我認爲rubyforge比github forks更官方,權威,更穩定。一旦我確定rubyforge版本與我的代碼一起工作,我會很好地詢問runco​​derun是否可以將它安裝在他們的系統上。

我sudo gem安裝了roo,我的寶石現在包含「hmcgowan-roo(1.3.5)」和「roo(1.3.6)」,運行hornsby-herbarium-parser的測試依然通過。我知道,由於rubyforge版本是最近安裝的,它應該是在測試中使用的,但我希望能夠驗證這一點。

gem which roo 

沒有幫助,因爲它給了我

(checking gem hmcgowan-roo-1.3.5 for roo) 
/usr/lib/ruby/gems/1.8/gems/hmcgowan-roo-1.3.5/lib/roo.rb 

,我認爲是錯誤的答案。

更新:我用兩種

$:.detect {|dir| dir =~ /roo/} 

puts Roo::VERSION::STRING 

雙方同意其中的寶石,他說,我現在還在使用hmcgowan-Roo的-1.3.5。

+0

你想從CLI或從Ruby內部,都可以嗎? – 2014-09-02 07:26:28

+0

類似但Rails(因此假設Bundler):http://stackoverflow.com/questions/1621405/how-to-tell-which-version-of-a-gem-a-rails-app-is-using – 2014-09-02 08:31:49

回答

3

首先,RubyGems的將加載最高版本號的寶石,而不是最近安裝。所以你應該在這裏獲得roo 1.3.6。

除此之外,我第二個gerrit的建議尋找一個版本常數。例如,我只是加載了rmagick,並且有一個不變的Magick :: Version。另一個例子是Open4 :: VERSION。

然而並非所有的寶石有一個版本常數,所以作爲後備,你可以做喜歡的事,哈克:

>> require 'open4' 
=> true 

>> $:.detect {|dir| dir =~ /\/open4-([^\/]*)\//} 
=> "/Library/Ruby/Gems/1.8/gems/open4-0.9.6/bin" 

>> $1 
=> "0.9.6" 
-1

最簡單的方法是單獨卸載然後重新安裝rubygems。 我不太確定你對github沒有穩定來源的假設是如此精確。

5

把所有的Roo::VERSION::STRING

1

寶石列表XXX 它默認加載最新版本。

1

你可以做使用Gem::VERSION

require 'rubygems'; puts Gem::VERSION 

,在一個Ruby程序,如果你想確保它是非常有用的是同一版本RubyGems的輸水所有機器在您的應用程序(如捆綁的Gemfile)

相關問題