数日前、私たちのサイトでトラフィックが急増しました。負荷を処理するためにスケールアップしている間に、単一のサーバーが限界に達し、リクエストがタイムアウトし始めました。その間、いくつかのリクエストによってレコードが作成されていました。問題は次のモデルに由来します。
class List < ActiveRecord::Base
before_save :set_published_at
def set_published_at
if published? && published_changed?
self.published_at = Time.now
end
end
end
何らかの理由で、この時期に公開された一部のリストは、published=true ですが、published_at=nil でした。
このモデルには他にも多数のコールバックと 1 つのオブザーバーがありますが、それらのどれも published_at 属性には影響しません。これは、5 分のウィンドウに集中した 5 つのレコードで発生しました。
published_at 属性が null であり、モデルがまだ published=true で保存されているのはなぜですか?