Ruby似乎每天都会腐败一次

时间:2013-06-06 14:23:43

标签: ruby-on-rails ruby rubygems

我有一台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。它可能会修复错误,但我怀疑明天我会得到另一个错误。

2 个答案:

答案 0 :(得分:0)

有点远,但你没有完整的光盘,是吗?

答案 1 :(得分:0)

prelink弄乱了Rails应用程序:http://www.tsheffler.com/blog/?p=491

  

网上的两篇文章表明Linux预链接优化器实际上破坏了Ruby二进制文件。解决方案是告诉系统在Ruby二进制文件上进行BAN预链接。按照建议将'-b / usr / bin / ruby​​'行添加到/etc/prelink.conf文件后,问题似乎已经消失。

更多信息: