Postgres データベースに対して実行される、Heroku でホストされている Rails 3 アプリがあります。RSS フィードを生成するはずのコントローラー アクションがありますが、アプリケーションが再起動するまで更新されないことがわかりました (Heroku に新しいリリースを行うため、またはサイトがしばらく非アクティブなため、dynoスピンダウンし、再びバックアップします)。新しいアイテムを除外する「古い」データを返しています。
スコープは、と呼ばれるモデルの行の比較に基づいて、次のように定義されdate
ますDate.current
。
class Petition < ActiveRecord::Base
scope :current, where(["petitions.date <= ?", Date.current]).order("petitions.date DESC")
scope :published, { :conditions => { :published => true } }
end
コントローラーのアクションは次のようになります。
class PetitionsController < ActionController::Base
before_filter :find_diary
def rss
current_petitions.each do |petition|
puts petition.date
end
end
protected
def find_diary
@diary = Diary.find(params[:id])
end
def current_petitions
@diary.petitions.published.current.limit(25)
end
end
ご覧のとおり、date
今日またはそれ以前の a を持つすべての請願を返すことになっています。Heroku コンソールでは問題なく動作Diary.find(15).petitions.published.current.limit(25).first
します。今日は常に 1 つ提供されます。ログからcurrent_petitions
、フィードがリクエストされるたびにその関数が呼び出されていることがわかります。しかし、サイトを 24 時間稼働させたままにしておくと、昨日までの嘆願書しか表示されません。デバッグ コードを追加するためにリリースを行うと、突然再び機能し始めます。