我怎样才能找到与Ruby打包的库的版本,例如:json?

wqlqzqxt  于 2023-10-21  发布在  Ruby
关注(0)|答案(3)|浏览(126)

一些Ruby功能与Ruby发行版打包在一起(不需要显式地安装为gem或通过安装器安装)。JSON就是一个例子(require 'json')。Ruby代码中可能需要它,但不需要安装gem。
然而,JSON是Github上的一个宝石,在https://github.com/flori/json
那么,当我在代码中需要'json'时,我怎么知道我得到的是哪个版本的gem呢?

tzcvj98z

tzcvj98z1#

或者,许多ruby gem在常量中指定它们的版本。
您可以利用它来确定您在代码或控制台中使用的版本。

require 'json'
JSON.constants.grep(/VERSION/)
#=>[:VERSION, :VERSION_ARRAY, :VERSION_MAJOR, :VERSION_MINOR, :VERSION_BUILD]
JSON::VERSION
#=> 2.5.1
require 'bundler'
Bundler.constants.grep(/VERSION/)
#=> [:VERSION]
Bundler::VERSION
#=> 2.2.3
brc7rcf0

brc7rcf02#

您可以找到Ruby主目录,并在其下搜索相应名称的目录,然后检查其version.rb文件。例如,使用rvm管理的rubies,我可以这样做(在Posix兼容的系统上,如Linux或Mac OS):

$ cd $(which ruby)/../..; pwd
/Users/keith.bennett/.rvm/rubies/ruby-3.0.1

$find . -type d -name '*json*'
./lib/ruby/3.0.0/psych/json
./lib/ruby/3.0.0/json
./lib/ruby/3.0.0/rdoc/generator/template/json_index
./lib/ruby/3.0.0/x86_64-darwin19/json
./lib/ruby/gems/3.0.0/gems/json-2.5.1
./lib/ruby/gems/3.0.0/gems/rbs-1.0.4/stdlib/json

我可以cat ./lib/ruby/3.0.0/json/version.rb | grep 'VERSION '(包括“VERSION”后面的空格),我得到:

VERSION         = '2.5.1'

..这也是上面清单中包含的gems目录中gem的版本。
所以我可以看到2.5.1是我的JSON版本。

guykilcj

guykilcj3#

对于那些寻找解决方案的人来说,即使是对于gems或不包含版本信息的常量的文件:

require 'json'
$LOADED_FEATURES.select { |x| x.match? 'json' }

require 'json'
Gem.loaded_specs['json'].version
=> Gem::Version.new("2.6.1")

相关问题