1

クライアントのレガシー 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"
4

0 に答える 0