确定你正在使用哪个rubygem

时间:2009-07-11 02:10:27

标签: ruby rubygems

如何确定响应“require”语句时使用的rubygem?宝石,似乎没有帮助。

背景:对于项目hornsby-herbarium-parser,我正在使用gem roo。

我使用了github gem hmcgowan-roo,因为那时它比rubyforge版本的roo更新。我尝试在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

都同意gem,说我还在使用hmcgowan-roo-1.3.5。

5 个答案:

答案 0 :(得分:5)

Roo::VERSION::STRING

答案 1 :(得分:3)

首先,rubygems将加载最高版本号gem,而不是最近安装的版本。所以你应该在这里获得roo 1.3.6。

除此之外,我第二个gerrit的建议是寻找版本常量。例如,我刚刚加载了rmagick,并且有一个不变的Magick :: Version。另一个例子是Open4 :: VERSION。

然而并非所有的宝石都有一个版本常量,所以作为一个后备,你可以做一些像hacky这样的事情:

>> require 'open4'
=> true

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

>> $1
=> "0.9.6"

答案 2 :(得分:1)

宝石清单xxx 它默认加载最新版本。

答案 3 :(得分:1)

您可以使用Gem::VERSION

require 'rubygems'; puts Gem::VERSION

在ruby程序中,如果你想确保你的应用程序在相同版本的rubygems下跨越所有机器(例如bundler Gemfile),这非常有用

答案 4 :(得分:-1)

最简单的方法是单独卸载然后重新安装rubygems。 我不太确定你对github没有稳定来源的假设如此准确。