更新至 OpenSSL 后,Ruby/Passenger 停止工作

更新至 OpenSSL 后,Ruby/Passenger 停止工作

有人yum update在 CentOS 机器上运行了Linux 2.6.28.1-xxxx-std-ipv4-32 #2 SMP Fri Jan 30 09:55:02 UTC 2009 i686 i686 i386 GNU/Linux一个 Ruby on Rails 应用程序 (Redmine) 已与 Passenger ( Phusion Passenger version 3.0.7) 一起提供服务。结果,RoR 应用程序停止工作,并且这就是现在发生的事情

我的理解是,该yum update命令更新了 OpenSSL 库,现在版本为OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008。我猜想这个版本不再与机器上安装的 Ruby 版本兼容 ( ruby 1.8.5 (2006-08-25) [i386-linux])。事实上,如果我require 'openssl'在 中执行此操作irb,我会得到以下结果:

$ irb
irb(main):001:0> require 'openssl'
TypeError: Cipher is not a class
        from /usr/lib/ruby/site_ruby/1.8/openssl/cipher.rb:22
        from /usr/lib/ruby/site_ruby/1.8/openssl.rb:20:in `require'
        from /usr/lib/ruby/site_ruby/1.8/openssl.rb:20
        from (irb):1:in `require'
        from (irb):1

这与通过 HTTP 访问应用程序时打印的错误相同。

我怀疑现在降级 OpenSSL 版本是一件有风险的事情,因为该yum update命令可能更新了现在依赖于新 OpenSSL 库的其他软件包(例如 mod_ssl)。

我决定检查 Ruby 1.8.7 是否能更好地与新版 OpenSSL 配合使用。我下载了它,构建了它并make install对其进行了编辑,以便 Ruby 二进制文件/usr/local/bin/与系统的 Ruby (1.8.5) 一起驻留,而后者/usr/bin/照常存在。在 irb 中执行操作require 'openssl'表明它确实有效。

现在,我的问题如下:我应该删除自己构建的 Ruby 版本,而是将系统的 Ruby 更新到 1.8.7 吗?或者我应该不知何故指示 Passenger 使用我自己构建的 ruby​​ 二进制文件(中的那个/usr/local/bin/)?

感谢您的帮助。

干杯,弗朗兹

答案1

第二种方法比第一种方法更安全。你可以使用虚拟机

rvm use 1.8.7
gem install passenger --pre

或者乘客红宝石指示:

PassengerRuby /usr/local/bin/ruby

关于第一种方法,首先尝试创建符号链接:

mv /usr/bin/ruby /usr/bin/ruby185.bak
ln -s /usr/local/bin/ruby /usr/bin/ruby

相关内容