Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 手动清除Rails中的片段缓存_Ruby On Rails 3_Caching_Memcached - Fatal编程技术网

Ruby on rails 3 手动清除Rails中的片段缓存

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,旧的[不正确的]缓存版

我将Memcached与Heroku一起用于Rails 3.1应用程序。我有一个错误,错误的东西显示-参数是不正确的缓存

我有这个:

<% 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])