如何在Ruby中访问gem的版本?

8
如何仅使用Ruby获取gem的版本?我不想使用系统调用并像这样在shell输出中使用grep:
`gem search passenger`.scan(/(?:\(|, *)([^,)]*)/).flatten.first
=> "2.2.9"

我能不能通过以下方式来获取它:

Gem::Version

我不知道如何指定我想要的 gem 版本,比如这种情况下我想获取 Passenger gem 的最新版本。


紧密相关,较旧,但不太清楚是从CLI还是从Ruby内部:https://dev59.com/SEjSa4cB1Zd3GeqPE2E5 - Ciro Santilli OurBigBook.com
4个回答

10

RubyGems的API文档很详细。

你一直在寻找的例子:

>>> require 'rubygems'
>>> si = Gem::SourceIndex.from_installed_gems
>>> gems = si.find_name('rails')
>>> gems.each { |gem| puts gem.version.version }
2.3.5

2
从 Ruby 1.9.3 开始,此方法已被弃用,并将输出看似无限的警告。 - Norswap

3

2

最简单的可行方法在这个重复问题的答案中概述:获取 Ruby 中 gem 的版本

Gem.loaded_specs[$NAME_OF_GEM].version

请注意,为了使此操作生效,您需要至少在lib目录中有一个文件。


1

这应该有助于您开始。这将搜索远程索引以获取特定 gem 的最新版本。

$ irb
>> require "rubygems"
>> dep = Gem::Dependency.new "passenger", Gem::Requirement.default
>> Gem::SpecFetcher.fetcher.find_matching dep
=> [[["passenger", #<Gem::Version "2.2.9">, "ruby"], "http://gems.rubyforge.org"]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接