web-dev-qa-db-ja.com

Ruby on Rails:キャッシュされたページをクリアする

開発環境でページをキャッシュしているRoRアプリケーション(Ruby v1.8.7; Rails v2.3.5)があります。これはそれほど大きな問題ではなく、キャッシュされたページのa要素は正しくありません。

Development.rbファイルに変更を加えておらず、コントローラーにキャッシュコマンドを意図的に追加していません。

このサイト(localhost)のブラウザー(OSX上のFirefox 3.5)Cookieとページキャッシュをクリアしようとしました。 Mongrelも再起動しました。何も助けにならないようです。

私は何が欠けていますか?

75
craig

Development.rbのこの行は、キャッシングが発生しないことを保証します。

config.action_controller.perform_caching             = false

Railsキャッシュをクリアするには

Rails.cache.clear

とはいえ、これがキャッシュの問題だとは思いません。ページに変更を加えていますが、反映されていませんか?あなたはおそらくそのページのライブバージョンを見ていませんか?私は一度それをやった(赤面)。

更新:

このコマンドは、コンソールから呼び出すことができます。開発中のアプリケーションを実行していますか?

唯一の選択肢は、レンダリングしようとしているページがレンダリングされているページではないということです。

サーバー出力を見ると、ページが次のようにレンダリングされたときにrenderコマンドを見ることができるはずです。

Rendered shared_partials/_latest_featured_video (31.9ms)
Rendered shared_partials/_s_invite_friends (2.9ms)
Rendered layouts/_sidebar (2002.1ms)
Rendered layouts/_footer (2.8ms)
Rendered layouts/_busy_indicator (0.6ms)
117
Apie

rake tmp:cache:clearはあなたが探しているものかもしれません。

104
Karen

アセットキャッシュを消去することで、この問題を解決できました。

$ rake assets:clean
24
Dan

/ publicでページの静的バージョンを確認し、存在する場合は削除します。 Rails 3.xがページをキャッシュすると、静的バージョンがパブリックフォルダーに残り、ユーザーがサイトにアクセスしたときにロードされます。これは、キャッシュをクリアした後でも残ります。

4
David Harbage

フラグメントキャッシュ を実行している場合、次のようにキャッシュキーを更新することにより、手動でキャッシュを解除できます。

バージョン#1

<% cache ['cool_name_for_cache_key', 'v1'] do %>

バージョン#2

<% cache ['cool_name_for_cache_key', 'v2'] do %>

または、次のように、ActiveRecordオブジェクトなどの非静的オブジェクトの状態に基づいてキャッシュを自動的にリセットできます。

<% cache @user_object do %>

この^メソッドを使用すると、ユーザーオブジェクトが更新されるたびに、キャッシュが自動的にリセットされます。

2
jeffdill2