我有一台Red Hat EL6服务器(用于制作)。我从源头安装了ruby和rubygems。
# uname -a
Linux servername 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux
# ruby -v
ruby 1.9.3p429 (2013-05-15 revision 40747) [x86_64-linux]
我可以从我的开发机器部署到这个生产服务器。一切都很好。我第二天来,得到乘客错误页面。我忘记了错误是什么,它发生在上周。但我甚至无法运行命令ruby -v
。
我试着调查发生了什么,我找不到错误的来源。所以我再次编译Ruby和RubyGems(2.0.3)。一切都很好。我星期一进来,得到乘客错误页面:
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:1070:in `require': closed stream (IOError)
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:1070:in `<module:Gem>'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:114:in `<top (required)>'
from <internal:gem_prelude>:1:in `require'
from <internal:gem_prelude>:1:in `<compiled>'
这次我可以运行诸如ruby -v
之类的ruby命令,但我无法运行gem -v
,因为我会在乘客页面上遇到同样的错误。
所以我转到rubygems.rb文件第1070行,看看产生错误的代码行,就是这个......
require "rubygems/specification"
所以我转到rubygems文件夹,有一个specification.rb文件。
更新
好的,所以我尝试再次安装rubygems并运行ruby setup.rb
这就是我得到的......
# ruby setup.rb
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:1070:in `require': closed stream (IOError)
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:1070:in `<module:Gem>'
from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:114:in `<top (required)>'
from <internal:gem_prelude>:1:in `require'
from <internal:gem_prelude>:1:in `<compiled>'
有没有人知道服务器发生了什么?我打算再次尝试编译rubygems。它可能会修复错误,但我怀疑明天我会得到另一个错误。
答案 0 :(得分:0)
有点远,但你没有完整的光盘,是吗?
答案 1 :(得分:0)
prelink弄乱了Rails应用程序:http://www.tsheffler.com/blog/?p=491
网上的两篇文章表明Linux预链接优化器实际上破坏了Ruby二进制文件。解决方案是告诉系统在Ruby二进制文件上进行BAN预链接。按照建议将'-b / usr / bin / ruby'行添加到/etc/prelink.conf文件后,问题似乎已经消失。
更多信息: