Authlogic保存导致502 Bad Gateway错误,Rails控制台中的非法指令

时间:2012-01-12 05:36:25

标签: ruby-on-rails console authlogic

我最近在代理服务器后面设置了一个新的应用服务器(Ruby 1.8.7 REE,Rails 2.3.8,Passenger 3.0.9,Nginx 1.0.6),并且遇到了一些奇怪的行为。仅在此应用服务器上发布到/ login时,我收到502 Bad Gateway错误。这在其他应用服务器上不会发生,并且两者都设置相同。我已经将问题缩小到特定的代码行 - 保存Authlogic会话。当我注释掉这些行(特别是保存调用)时:

@user_session = UserSession.new(params[:user_session])
if @user_session.save
...

不再发生502错误。同样,当我在控制台中测试这些命令时,我收到非法指令响应并且控制台崩溃:

>> Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)
>> @user_session = UserSession.new({"password"=>"password", "remember_me"=>"0", "login"=>"myuser"})
>> @user_session.save
Illegal instruction

在其他应用服务器上测试这个工作正常(控制台不会因非法指令结果而崩溃)。

知道从哪里开始排除故障?我在Rails日志或Nginx日志中看不到任何有价值的东西。

感谢。

修改

在系统调用digest.rb期间发生了非法指令。无论我使用Ubuntu Ruby Enterprise Edition包还是自己编译它都会发生同样的事情:

stat("/opt/ruby-enterprise-1.8.7-2011.12/lib/ruby/1.8/digest.rb", {st_mode=S_IFREG|0644, st_size=1145, ...}) = 0
open("/opt/ruby-enterprise-1.8.7-2011.12/lib/ruby/1.8/digest.rb", O_RDONLY) = 15
fstat(15, {st_mode=S_IFREG|0644, st_size=1145, ...}) = 0
close(15)                               = 0
--- SIGILL (Illegal instruction) @ 0 (0) ---

1 个答案:

答案 0 :(得分:1)

这听起来与Ruby 1.9 Ramaze App Failing with “Illegal instruction”有关。

Jörg W Mittag说:

  

“非法指令”通常是来自CPU的错误消息,这意味着您尝试运行的某些二进制代码包含未在该特定CPU上实现的指令。

     

这可能有多种原因:

     
      
  • 使用错误CPU的优化设置编译二进制文件。 CPU供应商一直在添加新的指令,如果编译器优化了比你的CPU更新的CPU,它可能会发出CPU不理解的指令。
  •   
  • 编译器坏了。
  •   
  • 二进制文件已损坏。
  •   
  • 您正在编译的代码包含汇编代码或包含CPU没有的指令的内在函数。
  •   

原始问题提交者Phil Kulak回复说他发现堆栈溢出导致错误。