クライアントのレガシー Rails 2.1.1 アプリで、Ruby がクラッシュして「不正な命令」を出力するエラーが発生しています。クラッシュは、Digest::SHA2 のメソッドの呼び出しによってトリガーされます。
>> Digest::SHA2
=> Digest::SHA2
>> Digest::SHA2.new()
Illegal instruction
Rails アプリは、ロード バランサーの背後にある 2 つのサーバーで実行されています。2 つのサーバーのスタックはほぼ同一であり、クラッシュをトリガーするのは 1 つだけです。どちらも REE 1.8.7、Rails 2.1、および Debian 6 です。1 つは Linux カーネル バージョン 3.9.3 を実行しており、もう 1 つはバージョン 3.9.2 を実行しています。
Digest::SHA2
ほとんどが C で実装されているようです。私は C をほとんど知らないので、これを診断するのは私の頭を悩ませています。正しい方向へのヘルプ/ポインタは大歓迎です!
本当にありがとう!!
環境情報
の REE ソースは次のとおりですDigest::SHA2
:
https://github.com/FooBarWidget/rubyenterpriseedition187-330/tree/master/ext/digest/sha2
クラッシュが発生しているサーバーで:
hostname@node1:~/appname$ cat /etc/issue
Debian GNU/Linux 6.0 \n \l
hostname@node1:~/appname$ uname -a
Linux node1.hostname.org 3.9.2-x86_64-[redacted] #1 SMP Tue May 14 17:16:34 EDT 2013 x86_64 GNU/Linux
hostname@node1:~/appname$ which ruby
/opt/ruby-enterprise-1.8.7-2012.02/bin/ruby
hostname@node1:~/appname$ irb
irb(main):001:0> require 'digest'
=> true
irb(main):002:0> Digest::SHA2.hexdigest('foo')
=> "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"
irb(main):003:0> exit
hostname@node1:~/appname$ ./script/console
Loading development environment (Rails 2.1.1)
>> Digest::SHA2.hexdigest('foo')
Illegal instruction
クラッシュしていないサーバーで:
hostname@node2:~/appname$ cat /etc/issue
Debian GNU/Linux 6.0 \n \l
hostname@node2:~/appname$ uname -a
Linux node2.hostname.org 3.9.3-x86_64-[redacted] #1 SMP Mon May 20 10:22:57 EDT 2013 x86_64 GNU/Linux
hostname@node2:~/appname$ which ruby
/opt/ruby-enterprise-1.8.7-2012.02/bin/ruby
hostname@node2:~/appname$ irb
irb(main):001:0> require 'digest'
=> true
irb(main):002:0> Digest::SHA2.hexdigest('foo')
=> "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"
irb(main):003:0> exit
hostname@node2:~/appname$ ./script/console
Loading development environment (Rails 2.1.1)
>> Digest::SHA2.hexdigest('foo')
=> "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"