コントローラーにこれがあります:
def frontpage
@sections = Section.all
end
実稼働環境では、クエリはリクエスト間でキャッシュされているようです。アプリを再起動するまで、@sections
常に同じです。これを修正する理由と方法を教えてください。また、私は本番環境でPostgresを使用していますが、それが理由でしょうか?
コントローラーにこれがあります:
def frontpage
@sections = Section.all
end
実稼働環境では、クエリはリクエスト間でキャッシュされているようです。アプリを再起動するまで、@sections
常に同じです。これを修正する理由と方法を教えてください。また、私は本番環境でPostgresを使用していますが、それが理由でしょうか?
あなたの本番環境では、どこかでキャッシュを有効にしていると思います。その理由と場所についてはお答えできませんが、解決策は次のとおりです。
def frontpage
uncached do
@sections = find(:all)
end
end
少なくともそれはうまくいくはずです
e: これの利点は、ブロック内のコードにのみ影響することです。他のすべては引き続きキャッシュされるはずです。
クエリはリクエスト間でキャッシュされませんが、アクションはキャッシュされる可能性があります。コントローラーで定義されているcache_action
、またはその他のキャッシュメカニズムはありますか?
編集:キャッシュされているのがあなたのアクションかどうかを判断するには、これをアクションに入れます:
def frontpage
return render :text => Time.now.to_s
...
end
そして、それが変化するのを見てください。
関連する質問からこの回答を見てください。構成がキャッシュするように設定されている場合は、それをオフにする必要があります (少なくとも開発中)。それ以外の場合、特定のページのキャッシュを無効にしたい場合は、コントローラーでそれを行うメソッドを定義することを検討できます。
private
def invalidate_cache
Rails.cache.delete("/sections")
end
それがいつ呼び出されるかを指定する必要がありますが、それでうまくいきます。