我正在使用Memcached和Heroku一起使用Rails 3.1应用程序。我有一个错误,错误的东西显示 - 缓存参数不正确。
我有这个:
<% cache("foo_header_cache_#{@user.id}") do %>
我删除了片段缓存并推送到Heroku,坏数据消失了。
然后我把它改为:
<% cache("foo_header_cache_#{@foo.id}") do %>
但是,当我更正参数时,从@user到@foo,旧的[不正确]缓存版本再次显示(而不是使用正确的数据刷新)。
如何手动使此过期,或以其他方式摆脱显示的错误数据?
答案 0 :(得分:38)
我最后通过进入rails控制台并使用以下命令手动清除整个缓存:
Rails.cache.clear
答案 1 :(得分:22)
从rails控制台:
Rails.cache.delete 'FRAGMENT-NAME'
答案 2 :(得分:20)
你在这里:
<% ActionController::Base.new.expire_fragment("foo_header_cache_#{@user.id}") %>
参考:
- How to call expire_fragment from Rails Observer/Model?
答案 3 :(得分:8)
从控制台:
你可以运行它(即如果你知道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])