0

現在、MySQL データベースを使用する Rails 3.2 アプリケーションで 2 つの非常に奇妙なバグが発生しています。

「parent_thing」に属するモデル「things」があります。これはオプションの関連付けであり、ほとんどの場合、nil であると予想されます。

ビューには、次のようなさまざまなブロックがあります。

if thing.parent_thing then
- show part of the view specific to things with parents

( if !thing.parent_thing.nil? や他の多くのバリアントも試しましたが、以下の動作に影響を与えるものはないようです)。

ローカル開発モードと Heroku のステージング環境では、これは期待どおりに機能します。4 つの Dyno で実行されている Heroku の本番環境では、約 70% の時間で動作しますが、設定されているかどうかに関係なく、thing.parent_thing への呼び出しが常に親を返すモードに切り替わるようです。

この動作はランダムに発生するように見えますが、一度発生し始めると、通常、システム全体で数時間発生します。その後、システムは最終的に期待される動作に戻ります。すべての Heroku dyno を再起動しても、一貫して問題が解決するわけではありません。Rails コンソールでログインし、関連する「モノ」エントリを検査すると、完全に正常な動作が得られます。

この動作を試して理解するために、エラー状態が発生するたびに、thing.inspect と thing.parent_thing.inspect の結果を送信するログを本番環境に追加しました。これは、thing.parent_thing_id を nil (正しい) として表示しますが、thing.parent_thing は関係なく親を返します。

上記に加えて、さらにデバッグを実装しようとすると、次のような問題が発生しました。

ビューの上部に変数 lines_when_parent_thing_exists = [] を作成しました。これは、thing.parent_thing が親を返す行番号を示す文字列を入力する配列です。

これに続いて、次のようなロギング関数が呼び出されます。

send_log_event({:message => "Lines where parent is returned", 
    :data => lines_when_parent_thing_exists.to_s}) 
    unless lines_when_parent_thing_exists.empty? 

上記の send_log_event 呼び出しは、配列が空であるかどうかに関係なく行われるため、データが [] である数百のログ エントリがあります。

これは、最初の問題が発生したときだけでなく、継続的に発生します。最初の問題に関する手がかりが得られるかどうかわからないため、これを含めます。

上記の原因について何か提案はありますか?

4

0 に答える 0