2009-07-11 4 views
6

"require"文に応じてどのrubygemが使用されているかをどのように判断できますか?助けてくれない宝石。あなたが使っているrubygemを調べる

背景:ホーンビー・ヘルバリウム・パーサーのプロジェクトでは、私は宝石宝石を使用しています。

その時点でそれはカンガルーののRubyForgeのバージョンより新しいだったので、私は、githubの宝石hmcgowan-ROOを使用。私はrunco​​derunでコードをテストしようとしましたが、rooのバージョンがないため失敗しました。この時までにgithubとrubyforgeの両方で新しいバージョンのrooが利用可能になりました。

私はのRubyForgeはより公式、権威、そしてgithubのフォークよりも安定していると仮定してのRubyForgeから最新バージョンは、私のコードのために動作するか私も見ることができることを決めました。 Rubyforgeのバージョンが自分のコードで動作することを確認したら、システムにインストールできるかどうかをrunco​​derunに尋ねます。

私はsudo gemがインストールされていて、私の宝石には "hmcgowan-roo(1.3.5)"と "roo(1.3.6)"が含まれていて、hornsby-herbarium-私はrubyforgeバージョンが最近インストールされたので、であることがテストで使用されているはずですが、これを確認できるようにしたいと思います。それは私が間違った答えであると仮定し

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

を与えたので

gem which roo 

は、助けにはなりませんでした。

更新:私は両方

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

puts Roo::VERSION::STRING 

の両方を使用するには、私はまだhmcgowan-ROO-1.3.5を使っていると言って、宝石に同意します。

+0

CLIからでもRubyからでもどちらでもかまいませんが、どちらもOKですか? –

+0

Railsと似ていますが(Bundlerを想定しています):http://stackoverflow.com/questions/1621405/how-to-tell-which-version-of-a-gem-a-rails-app-is-using –

答えて

3

まずを置き、RubyGemsのは、最近インストールされ、最も高いバージョン番号の宝石をしませロードします。だから、あなたはここで1.3.6を得るべきです。

それ以外は、バージョン定数を探すための第2の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

$のことを考えなかった:、ありがとう。しかし、正規表現では、誰かがjohndoe-open4を作成した場合、それは一致しません。 –

+0

真、真。これは私がそれを「ハッキー」と呼んだ理由です:)しかし、おそらくあなたはそれをもう少し修正することができます。 –

-1

最も簡単な方法は、rubygemを個別にアンインストールしてから再インストールすることです。 私は、安定した情報源を持たないギブスについてのあなたの前提がとても正確であるとは確信していません。

5

は、すべてのRoo::VERSION::STRING

1

宝石のリストxxxの最新バージョンをロードする それはデフォルト:あなたのようなハック何かができるようにフォールバック

は、しかし、すべての宝石は、一定のバージョンを持っていません。

1

あなたは非常に便利であるRubyプログラムにあなたが(例えばバンドラGemfile)RubyGemsの同じバージョンの下で、アプリケーションがすべてのマシンをaccrossingことを確認する場合は、そのGem::VERSION

require 'rubygems'; puts Gem::VERSION 

使用を行うことができます

関連する問題