3

我们有一个较旧的 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

4

3 回答 3

8

我在使用 ruby​​ 和 Max OS X Yosemite 的版本时遇到了同样的问题ree-1.8.7-2012.02,并且由于我在互联网上找到的所有解决方案都对我不起作用,经过一些测试后我找到了解决方案。

你只需要改变Digest::SHA512.hexdigest(digest)它就OpenSSL::Digest::SHA512.new(digest).hexdigest可以正常工作。

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

于 2015-08-12T10:52:16.793 回答
1

解决方案:

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

我将 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 现在启动并在 Yosemite 下运行。

于 2015-06-29T09:01:05.580 回答
0

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

有趣的是,我正在从运行 Yosemite 的 Mac 转移到同样运行 Yosemite 的全新 Mac。旧的 mac 没有 seg 故障问题。两台机器都使用 Yosemite、rvm、ruby 1.8.7

但我注意到“新 mac”使用 openssl 1.0.2c 2015 年 6 月 12 日,“旧 mac”使用 openssl 1.0.1c 2012 年 5 月 10 日

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

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

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

更新:

'老麦克'

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

报告 OpenSSL 0.9.8r 2011 年 2 月 8 日

“新 mac”报告 OpenSSL 1.0.2c 2015 年 6 月 12 日

于 2015-06-26T14:42:47.297 回答