0

コントローラーにこれがあります:

def frontpage
  @sections = Section.all
end

実稼働環境では、クエリはリクエスト間でキャッシュされているようです。アプリを再起動するまで、@sections常に同じです。これを修正する理由と方法を教えてください。また、私は本番環境でPostgresを使用していますが、それが理由でしょうか?

4

3 に答える 3

1

あなたの本番環境では、どこかでキャッシュを有効にしていると思います。その理由と場所についてはお答えできませんが、解決策は次のとおりです。

def frontpage
    uncached do
        @sections = find(:all)
    end
end

少なくともそれはうまくいくはずです

e: これの利点は、ブロック内のコードにのみ影響することです。他のすべては引き続きキャッシュされるはずです。

于 2012-06-10T23:56:39.383 に答える
0

クエリはリクエスト間でキャッシュされませんが、アクションはキャッシュされる可能性があります。コントローラーで定義されているcache_action、またはその他のキャッシュメカニズムはありますか?

編集:キャッシュされているのがあなたのアクションかどうかを判断するには、これをアクションに入れます:

def frontpage
  return render :text => Time.now.to_s
  ...
end

そして、それが変化するのを見てください。

于 2012-06-11T02:23:19.483 に答える
0

関連する質問からこの回答を見てください。構成がキャッシュするように設定されている場合は、それをオフにする必要があります (少なくとも開発中)。それ以外の場合、特定のページのキャッシュを無効にしたい場合は、コントローラーでそれを行うメソッドを定義することを検討できます。

private
def invalidate_cache
     Rails.cache.delete("/sections")
end

それがいつ呼び出されるかを指定する必要がありますが、それでうまくいきます。

于 2012-06-11T03:32:55.587 に答える