如何确定使用哪个rubygem来响应"require"语句?似乎没有帮助的宝石.
背景:对于项目hornsby-herbarium-parser,我正在使用gem roo.
我使用了github gem hmcgowan-roo,因为那时它比rubyforge版本的roo更新.我尝试在runcoderun上测试代码,但它失败了,因为它没有任何版本的roo.到目前为止,github和rubyforge都提供了新版本的roo.
我决定我不妨看看来自RubyForge的最新版本适用于我的代码,因为我认为RubyForge的是更正式的,权威的,而且比github上叉稳定.一旦我确定rubyforge版本适用于我的代码,我会很好地问runcoderun是否可以在他们的系统上安装它.
我sudo gem安装roo,我的宝石现在包括"hmcgowan-roo(1.3.5)"和"roo(1.3.6)",并且运行hornsby-herbarium-parser的测试仍然通过.我知道因为rubyforge版本最近安装了,它应该是测试中使用的版本,但我希望能够验证这一点.
gem which roo
Run Code Online (Sandbox Code Playgroud)
没有帮助,因为它给了我
(checking gem hmcgowan-roo-1.3.5 for roo)
/usr/lib/ruby/gems/1.8/gems/hmcgowan-roo-1.3.5/lib/roo.rb
Run Code Online (Sandbox Code Playgroud)
我认为这是错误的答案.
更新:我用过两者
$:.detect {|dir| dir =~ /roo/}
Run Code Online (Sandbox Code Playgroud)
和
puts Roo::VERSION::STRING
Run Code Online (Sandbox Code Playgroud)
两人都同意宝石,说我还在使用hmcgowan-roo-1.3.5.
首先,rubygems 会加载最高版本号的 gem,而不是最近安装的。所以你应该在这里得到 roo 1.3.6。
除此之外,我赞同 gerrit 的建议,即寻找版本常量。例如,我刚刚加载了 rmagick,并且有一个恒定的 Magick::Version。另一个例子是 Open4::VERSION。
然而,并不是所有的 gems 都有版本常量,所以作为后备,你可以做一些像 hacky 的事情:
>> require 'open4'
=> true
>> $:.detect {|dir| dir =~ /\/open4-([^\/]*)\//}
=> "/Library/Ruby/Gems/1.8/gems/open4-0.9.6/bin"
>> $1
=> "0.9.6"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3465 次 |
| 最近记录: |