【问题标题】:Authlogic save causing 502 Bad Gateway error, Illegal Instruction in Rails consoleAuthlogic 保存导致 502 Bad Gateway 错误,Rails 控制台中的非法指令
【发布时间】:2016-09-10 18:27:21
【问题描述】:

我最近在代理后面设置了一个新的应用服务器(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 错误不再发生。同样,当我在控制台中测试这些命令时,我收到 Illegal Instruction 响应并且控制台崩溃:

>> 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) ---

【问题讨论】:

  • 仅供参考,我验证(使用差异)问题应用服务器上的 Authlogic gem 与工作应用服务器上的相同,所以这不是问题。
  • 如果你在 IRB 中 require 'digest' 会发生什么?
  • require 'digest' 在 IRB 中工作得很好。

标签: ruby-on-rails console authlogic


【解决方案1】:

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

Jörg W Mittag说:

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

这可能有多种原因:

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

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

【讨论】:

  • 感谢您的回复。我已经编辑了我的原始帖子,以反映崩溃是在系统调用 digest.rb 期间发生的。
  • 仅供参考,“非法指令”问题与我的托管公司构建的 VPS 有关。我最终转向了一台纯专用机器,直到他们解决了问题,当我解决问题时问题就消失了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 2019-03-07
  • 1970-01-01
  • 2018-04-23
相关资源
最近更新 更多