0

プロダクションレールアプリケーションで断続的に次のエラーが発生します

NoMethodError (undefined method `values' on priority:Symbol.):
  app/controllers/things_controller.rb:33:in `index'

問題のある行は次のようになります。

@things = Thing.where(:some_column => 'some_value').order(:priority).reverse

Thingはアクティブレコードモデルです。

奇妙なことに、アプリケーションを再起動するとエラーが消えます。これが発生するのは、いくつかの奇妙な状況下だけです (preprod/dev 環境では再現できません)。

誰かが前にこのようなものに出くわしたことがありますか? このバグを診断する方法を誰か提案できますか? 問題の行は問題ではないようです (本番環境のログにも完全なスタック トレースは表示されません)。

4

1 に答える 1

0

髪を引っ張るセッションの後、これは rubinius (2.2.10 および 2.2.9) のバグによるものであることがわかりました。ActiveRecord クエリ メソッドwhereorder両方が内部的に enumerable#grep を呼び出します。アプリケーションがしばらく実行された後、またはいくつかの不明な条件が満たされた後、配列にシンボルが含まれていると、この関数は正しく動作しなくなります。

ブロックが grep 関数の引数として指定されると、指定されたパターンに関係なく、このブロックは常に配列のシンボル要素に適用されます。

バグレポートはこちら

于 2014-09-22T13:13:37.833 に答える