ruby - 在运行时检测 ruby​​ 二进制编译布局

标签 ruby binary openssl

与 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/

相关文章:

整数转二进制: questions about efficiency的Python算法

hadoop - 如何在 Hadoop Streaming 中使用 "typedbytes"或 "rawbytes"?

assembly - 难倒在 LC-3 组装的扩展乘法上

openssl - 如何使用 tls 1.3 制作 ssl 证书?

ios4 - 为什么在包含 OpenSSL 静态库时会出现编译错误?

openssl CRC32 计算

ruby - 我可以使用 `else if` 而不是 `elsif` 吗?

ruby - 我可以删除 Ruby 中的方法别名吗?

ruby - 如何使 cucumber 测试中场景大纲示例中的多行字符串起作用?

ruby - ActiveSupport::Concern 为什么/如何更改祖先查找顺序?