升级到Sierra后的OpenSSL Seg Fault - ruby​​ 1.8.7

时间:2016-10-20 10:00:21

标签: ruby-on-rails ruby macos openssl rvm

我已将一台正在运行的开发机器升级到Sierra,并且无法再使用Capistrano进行部署。

跟踪它,问题在于调用

OpenSSL::PKey::RSA.new

这导致

/Users/programmer1/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/irb.rb:310: [BUG] Segmentation fault
ruby 1.8.7 (2013-06-27 patchlevel 374) [i686-darwin16.0.0]

我还有另一台Mac也升级到了Sierra,但很好。

我使用rvm为Openssl v0.9.8zg构建了ruby。

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

如果我针对系统安装的Openssl构建了rvm的ruby,我可以使用Capistrano,但是当用户使用SSL设置的故障登录到Ruby on Rails应用程序时,Authlogic会失败。

如果我针对OpenSSL v0.9.8zg构建了rvm的ruby,那么Authlogic可以正常工作,但是Capistrano在连接到远程服务器时会出现故障。

我在运行Capistrano之前尝试将DYLD_LIBRARY_PATH设置为本地构建的OpenSSL v0.9.8,但它仍然是核心转储。

Ruby on Rails 2.3.18(遗留应用程序)。 Ruby 1.8.7-p374 OS X Sierra

现在已经没有想法如何继续这个了。

更新

otool -L /Users/programmer1/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/i686-darwin16.0.0/openssl.bundle

/Users/programmer1/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/i686-darwin16.0.0/openssl.bundle:
/Users/programmer1/.rvm/rubies/ruby-1.8.7-p374/lib/libruby.dylib (compatibility version 1.8.0, current version 1.8.7)
/opt/local/lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

表明ruby总是使用libssl1.0.0而不是0.9.7

如何告诉rvm链接SSL的0.9.7?

1 个答案:

答案 0 :(得分:0)

我发布了一个解决我自己问题的解决方案,作为对我自己以及将来遇到此问题的其他人的一个说明。

似乎openssl(0.9.8)编译为32位而不是64位。

我配置了OpenSSL:

./config darwin64-x86_64-cc shared enable-ec_nistp_64_gcc_128 no-ssl2 no-ssl3 no-comp --openssldir=/usr/local/ssl/macos-x86_64

(见https://wiki.openssl.org/index.php/Compilation_and_Installation#OS_X

然后通过rvm重新安装ruby1.8.7

rvm reinstall 1.8.7-p374 --autolibs=0 --with-openssl --with-opt-dir=/usr/local/ssl/macos-x86_64

检查加载的版本

otool -L /Users/programmer1/.rvm/rubies/ruby-1.8.7-p374/lib/ruby/1.8/i686-darwin16.0.0/openssl.bundle