在Rails中手动清除片段缓存

时间:2012-05-04 06:09:28

标签: 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,旧的[不正确]缓存版本再次显示(而不是使用正确的数据刷新)。

如何手动使此过期,或以其他方式摆脱显示的错误数据?

4 个答案:

答案 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)的idupdated_at时间。它会像“views / foo_header_cache / users / 1-20160901021000”

或者只是使用数组清除它。

ActionController::Base.new.expire_fragment([:foo_header_cache, @user])