2012-03-08 12 views
1

this questionにはBundlerの依存関係リストを分析する答えがありました。これはうまくいきますが、 "> ="依存関係のため、実際に使用されているパッケージとバージョンのリストは表示されません。依存関係が何であるのではなく、実際に使用されているパッケージとバージョンのリストを取得する方法はありますか?Bundlerから宝石のバージョンをプログラムで取得する

+0

私はすなわち、そのほかの質問に要求された情報のような多くのことを返された情報が欲しい: は[[ "actionmailerの" "3.1.3"] [ "CoffeeScriptの" "2.0.2"]] – Jeremiah

+0

既にバンドルされているプロジェクトに使用されている宝石のリストを取得することを意味しますか?あるいは、Gemfileへのアクセスがないところで他の質問が尋ねたことを意味していますか? –

+0

Gemfileへのアクセスを想定していません。他の質問への答えは、Gemfileにあるものを返します(バージョンでは "〜>"と "> ="が付きます)。私が必要とするのは、正確にインストールされたバージョン情報です。 – Jeremiah

答えて

1

これを行う方法は、他の質問に投稿されたものと同様であるように見える:

Rails.logger.debug "Type is " + Bundler.environment.specs.class.to_s 
Rails.logger.debug "Value is " + Bundler.environment.specs.to_hash.to_s 

が生成されます

Type is Bundler::SpecSet 
    Value is {"activemodel"=>[#<Gem::Specification name=activemodel version=3.1.3>], 
       "actionpack"=>[#<Gem::Specification name=actionpack version=3.1.3>], 
       "actionmailer"=>[#<Gem::Specification name=actionmailer version=3.1.3>]} 

このコードは、宝石のすべてを出力しますあなたの現在の環境で使用されているバージョン。その他の質問の答えについては、あなたの現在のレール環境にないもの(例えば、 "テスト"宝石グループに含まれているもの)を含め、すべての依存関係が返されることに注意してください。

1

このコードはBundlerコードベースから抽出され、Railsコンソール内からbundle listと全く同じことを行います。

Bundler.load.specs.sort_by(&:name).each{|s| puts " * #{s.name} (#{s.version}#{s.git_version})"}; nil 

依存関係の配列が必要な場合は、これでもかまいません。

Bundler.load.specs.map{|s| "#{s.name} (#{s.version}#{s.git_version})"} 
+0

何らかの理由でユーザーがGemfile/Gemfile.lockにアクセスできないそれ以外の場合は、バンドルリストを入力するだけです。 –

+0

私の変更された回答を参照してください。 –

関連する問題