Ruby Digest::SHA512.hexdigest 抛出一个段错误并在 Yosemite 中退出



我们有一个较旧的REE rails应用程序,我在OSX Yosemite的本地开发环境中工作。我最近从小牛队转了过来,我没有问题。我第一次在我的新工作Mac上运行这个应用程序,发现我无法登录,因为它抛出了一个段错误并退出了本地webrick服务器。经过一番调查,我找到了罪魁祸首:

digest = Digest::SHA512.hexdigest('some_arbitrary_value')

在进一步调查中,我发现这行代码抛出以下错误:

[BUG] Segmentation fault
ruby 1.8.7 (2013-06-27 MBARI 8/0x6770 on patchlevel 374) [i686-darwin14.3.0], MBARI 0x6770, Ruby Enterprise Edition 2012.02

。并退出了 Ruby 控制台。

Ruby 版本 1.8.7 和 REE 在我的 OSX Yosemite 机器上都会产生此问题。Ruby 版本 1.9.3 及更高版本似乎可以生成预期的哈希而没有错误。

为什么从OSX Mavericks切换到Yosemite后Digest::SHA512.hexdigest会产生[BUG] Segmentation fault错误?

我在 ruby 和 Max OS X Yosemite 的第 ree-1.8.7-2012.02 版中遇到了同样的问题,并且由于我在互联网上找到的所有解决方案都不适合我,经过一些测试,我找到了解决方案。

您只需要将Digest::SHA512.hexdigest(digest)更改为OpenSSL::Digest::SHA512.new(digest).hexdigest即可正常工作。

这有点不方便,因为您必须更改整个应用程序中的代码,但作为最后一个资源,它可以工作。

解决方案:

您需要确保 ruby 是使用旧版本的 openssl 构建的。

我将 0.9.8 openssl 下载到一个目录 (~/builds/openssl-0.9.8zg) 中,构建了它但没有安装它。安装 ruby 版本时,将 rvm 指向 openssl 0.9.8 目录

rvm reinstall 1.8.7-p374 --autolibs=0 --with-openssl=~/builds/openssl-0.9.8zg

这对我有用,rails 2.3.18 现在启动并在优胜美地下运行。

我没有答案,但有完全相同的问题。

有趣的是,我正在从运行优胜美地的Mac转移到运行优胜美地的全新Mac。旧Mac没有赛格故障问题。两台机器都使用优胜美地,rvm,ruby 1.8.7

但我注意到"新Mac"使用openssl 1.0.2c 12 Jun 2015和"旧Mac"使用openssl 1.0.1c 10 May 2012

这可能与正在编译的 SSL 库版本有关吗?

很抱歉没有提供答案,但认为这值得一提,以防有帮助。

我正在继续调查,并将在这里报告任何成功。

更新:

"旧麦克"

ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'

报告 OpenSSL 0.9.8r 2011 年 2 月 8 日

"新Mac"报告OpenSSL 1.0.2c 12 Jun 2015

相关内容

  • 没有找到相关文章

最新更新