【问题标题】:ruby - determine version of core libraries offlineruby - 离线确定核心库的版本
【发布时间】:2017-11-27 23:39:05
【问题描述】:

对于非核心库,gem list | grep rails 将显示版本(例如rails (5.1.4))。

对于核心库,比如openssl,不用查ruby的版本再上网查,有没有办法在本地判断是什么版本?

OpenSSL.methods 不包含代码内方式,文件中没有 cmets(对我来说是~/.rbenv/versions/2.4.2/lib/ruby/2.4.0/openssl.rb),该文件夹不是 git 存储库,所以我无法查看提交哈希...唯一的选择肯定不能是系统地检查版本并与我拥有的源代码逐个文件进行比较,直到我得到完全匹配?

【问题讨论】:

  • OpenSSL.constants 会发现解决方案
  • 请注意,openssl 不是核心库,而是标准库。目前正在对标准库进行宝石化工作。 (其实在Rubinius中,标准库已经gemified很久了,甚至核心库,编译器都安装为gems。)如果openssl已经gemified(我没有密切关注过程),那么你应该能够找到 gemspec 和版本。

标签: ruby


【解决方案1】:

一个变通的解决方案,所以不会接受它:

使用 ri -i 打开交互式 ruby​​ 文档

键入OpenSSL 或任何要查找的内容,然后按回车...它会告诉您相关信息。向下滚动,您可能会发现如下内容:

Constants:

OPENSSL_FIPS:                                                                                                                                     [not documented]

OPENSSL_LIBRARY_VERSION:
  Version of OpenSSL the ruby OpenSSL extension is running with

OPENSSL_VERSION:
  Version of OpenSSL the ruby OpenSSL extension was built with

OPENSSL_VERSION_NUMBER:
  Version number of OpenSSL the ruby OpenSSL extension was built with (base
  16)

VERSION:
  OpenSSL ruby extension version

因此,在 ruby​​ 控制台中,您可以这样做:

irb> require 'openssl'
=> true
irb> OpenSSL::OPENSSL_VERSION
=> "OpenSSL 1.0.2l  25 May 2017"

所以通用的解决方案是阅读交互式文档,寻找一个方便命名的常量,然后从控制台访问该常量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 2021-04-08
    相关资源
    最近更新 更多