与 RVM(“最流行的 Ruby 安装工具”)一起安装的 Ruby 经常会生成无法进行 SSL 操作(例如通过 HTTPS 连接)的二进制文件。这是一个已知问题 known workaround .
如果您尝试对此类 Ruby 二进制文件使用 SSL,则会导致异常 LoadError: cannot load such file -- openssl
。
问题:有什么方法可以判断 Ruby 二进制文件是针对哪些库构建的,从而检测它是否支持 SSL 在运行时?除了尝试实际使用 SSL 并捕获异常之外?
最佳答案
除非您想做与 require 相同的工作,否则我认为最简单的方法是尝试要求 openssl 并拯救 LoadError,以防它不存在于系统中以检测其可用性。
好像是个成语commonly用过。
如果你想要一些事后检测它是否被加载的东西
ruby -ropenssl -e 'p defined? OpenSSL' # => "constant"
对比
ruby -e 'p defined? OpenSSL' # => nil
有帮助吗?
即检查defined?(OpenSSL)
的返回值是否为非nil?
我们通常在 tests 中使用它在运行时排除使用所有版本 OpenSSL 不可用的功能的测试,如果 OpenSSL 不作为扩展存在,则完全排除测试(if defined?OpenSSL
)。
关于ruby - 在运行时检测 ruby 二进制编译布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9718927/