2

パブリックにアクセス可能なエンドポイントを使用して、コントローラー アクションのキャッシュを期限切れにしてから更新しようとしています。

現在、私のアプリでは、/all はキャッシュされた json を返し、/update はキャッシュを期限切れにします。以下の既存の関連コードを確認できます。私がやりたいのは、キャッシュを期限切れにするだけでなく、強制的に更新することです。だから、私の質問は:

アクションをヒットせずに、有効期限が切れた後にアクションキャッシュの更新を開始する方法はありますか?

それに対する答えが「いいえ」である場合 (私が疑い始めているように)、これを行うための最良の方法は何でしょうか? 更新アクションが 301 リダイレクトではなく HTTP 200 ステータスを返す必要があるため、/all へのリダイレクトだけはオプションではありません。

ベンダーコントローラー

caches_action :all, :expires_in=>2.weeks

....

def all 
  respond_to do |format|
    format.json { render :json => Vendor.all }
    format.html { render :json => Vendor.all }
  end
end


....

def update
  render :nothing => true
  expire_action :action => :all
end
4

1 に答える 1

3

使用する必要がありますwrite_fragment

def update
  render :nothing => true
  expire_action :action => :all

  cache_path = ActionCachePath.new(self, {:action => :all}, false).path
  write_fragment(cache_path, render_to_string(:json => Vendor.all))
end

役立つソース:

于 2013-02-25T16:32:12.957 に答える