Ruby on rails Authlogic save导致502错误网关错误,Rails控制台中的指令非法

Ruby on rails Authlogic save导致502错误网关错误,Rails控制台中的指令非法,ruby-on-rails,console,authlogic,Ruby On Rails,Console,Authlogic,我最近在一个代理后面安装了一个新的应用服务器(Ruby 1.8.7 REE、Rails 2.3.8、Passenger 3.0.9、Nginx 1.0.6),我遇到了一些奇怪的行为。仅在该应用服务器上发布/登录时,我收到502错误网关。这不会发生在另一个应用服务器上,并且两者的设置相同。我已经将问题缩小到一行特定的代码——保存Authlogic会话。当我注释掉这些行(特别是save调用)时: 502错误不再发生。同样,当我在控制台中测试这些命令时,我得到一个非法指令响应,控制台崩溃: >&

我最近在一个代理后面安装了一个新的应用服务器(Ruby 1.8.7 REE、Rails 2.3.8、Passenger 3.0.9、Nginx 1.0.6),我遇到了一些奇怪的行为。仅在该应用服务器上发布/登录时,我收到502错误网关。这不会发生在另一个应用服务器上,并且两者的设置相同。我已经将问题缩小到一行特定的代码——保存Authlogic会话。当我注释掉这些行(特别是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) ---

这听起来像是和你的关系

他说:

“非法指令”通常是来自CPU的错误消息,表示您试图运行的某段二进制代码包含未在该特定CPU上实现的指令

这可能有多个原因:

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

原始问题提交人回答说,他发现了导致错误的堆栈溢出。

FYI,我验证(使用diff)问题应用服务器上的Authlogic gem与工作应用服务器上的Authlogic gem相同,所以这不是问题所在。如果您在IRB中
需要“摘要”
,会发生什么?
需要“摘要”
在IRB中效果很好。谢谢您的回复。我编辑了我的原始帖子,以反映崩溃发生在对digest.rb.FYI的系统调用期间,“非法指令”问题与我的托管公司构建的VPS有关。我最终搬到了一台纯粹专用的机器上,直到他们解决了问题,当我解决问题时,问题就消失了。
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) ---