2009-07-11 521 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)

相关问题