以编程方式从Bundler获取gem版本

时间:2012-03-08 22:41:49

标签: ruby rubygems bundler

this question中,给出了分析Bundler依赖列表的答案。这很好用,但由于“> =”依赖关系,它没有提供实际使用的包和版本列表。有没有办法获得实际使用的包和版本列表,而不仅仅是依赖项是什么?

2 个答案:

答案 0 :(得分:2)

此代码是从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})"}

答案 1 :(得分: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>]}

此代码将打印出当前环境中使用的所有gem和版本。关于其他问题的答案有一点需要注意的是,它将返回所有依赖项,即使那些不在当前rails环境中的依赖项(例如,那些在“test”gem分组中的那些)。 / p>