Ruby on rails 3 手动清除Rails中的片段缓存
我将Memcached与Heroku一起用于Rails 3.1应用程序。我有一个错误,错误的东西显示-参数是不正确的缓存 我有这个:Ruby on rails 3 手动清除Rails中的片段缓存,ruby-on-rails-3,caching,memcached,Ruby On Rails 3,Caching,Memcached,我将Memcached与Heroku一起用于Rails 3.1应用程序。我有一个错误,错误的东西显示-参数是不正确的缓存 我有这个: <% cache("foo_header_cache_#{@user.id}") do %> 我删除了片段缓存并推送到Heroku,坏数据就消失了 然后我把它改成: <% cache("foo_header_cache_#{@foo.id}") do %> 然而,当我更正参数时,从@user到@foo,旧的[不正确的]缓存版
<% cache("foo_header_cache_#{@user.id}") do %>
我删除了片段缓存并推送到Heroku,坏数据就消失了
然后我把它改成:
<% cache("foo_header_cache_#{@foo.id}") do %>
然而,当我更正参数时,从@user到@foo,旧的[不正确的]缓存版本再次出现(而不是用正确的数据刷新)
如何手动终止此缓存,或以其他方式清除正在显示的此坏数据?最后,我进入rails控制台并使用以下命令手动清除整个缓存:
Rails.cache.clear
给你:
<% ActionController::Base.new.expire_fragment("foo_header_cache_#{@user.id}") %>
参考资料:-从rails控制台:
Rails.cache.delete 'FRAGMENT-NAME'
从控制台: 您可以运行此操作(即,如果您知道id为“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\u。它类似于“views/foo\u header\u cache/users/1-20160901021000”
或者简单地使用数组清除它
ActionController::Base.new.expire_fragment([:foo_header_cache, @user])
这是现在的正确答案。公认的方法是用猎枪杀死苍蝇。约翰·科洛扬的回答允许你将一个片段过期。如果您有一个站点获得了相当多的流量,并且依赖于缓存,那么当缓存被预热时,使所有内容过期可能会导致页面加载非常慢或超时错误。
ActionController::Base.new.expire_fragment([:foo_header_cache, @user])