Rails 3.1アプリにHerokuでMemcachedを使用しています。バグがあり、間違ったものが表示されています。キャッシュのパラメーターが正しくありませんでした。
私はこれを持っていました:
<% cache("foo_header_cache_#{@user.id}") do %>
フラグメントキャッシュを削除してHerokuにプッシュすると、不良データはなくなりました。
そして、私はそれを次のように変更しました:
<% cache("foo_header_cache_#{@foo.id}") do %>
ただし、パラメータを@userから@fooに修正すると、(正しいデータで更新する代わりに)古い[誤った]キャッシュバージョンが再び表示されました。
これを手動で期限切れにする、または表示されているこの不良データを取り除くにはどうすればよいですか?
Railsコンソールに移動し、次のコマンドを使用して、キャッシュ全体を手動でクリアすることになりました。
Rails.cache.clear
Railsコンソールから:
Rails.cache.delete 'FRAGMENT-NAME'
はい、どうぞ:
<% ActionController::Base.new.expire_fragment("foo_header_cache_#{@user.id}") %>
参照:
- Rails Observer/Model? からexpire_fragmentを呼び出す方法
コンソールから:
これを実行できます(つまり、IDが「1」であることがわかっている場合)
ActionController::Base.new.expire_fragment("foo_header_cache_1")
Rails.cache.delete
を使用するには、フラグメント名を知っている必要があります。あなたの場合、それは
Rails.cache.delete("views/foo_header_cache_1") # Just add 'views/' to the front of the string
次のようなオブジェクトを使用する配列ベースのキャッシュキーがある場合:
cache([:foo_header_cache, @user])
次に、そのようにフラグメント名を取得できます
ActionController::Base.new.fragment_cache_key([:foo_header_cache, @user])
名前には、任意のオブジェクトから(yyyymmddhhmmssまでの)id
およびupdated_at
時間が含まれます。 「views/foo_header_cache/users/1-20160901021000」のようになります
または、配列を使用してクリアします。
ActionController::Base.new.expire_fragment([:foo_header_cache, @user])