有人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/
)?
感谢您的帮助。
干杯,弗朗兹