【发布时间】: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