yel*_*ign 21 memcached caching ruby-on-rails-3
我正在使用Memcached和Heroku一起使用Rails 3.1应用程序.我有一个错误,错误的东西显示 - 缓存参数不正确.
我有这个:
<% cache("foo_header_cache_#{@user.id}") do %>
Run Code Online (Sandbox Code Playgroud)
我删除了碎片缓存并推送到Heroku,坏数据消失了.
然后我改为:
<% cache("foo_header_cache_#{@foo.id}") do %>
Run Code Online (Sandbox Code Playgroud)
但是,当我更正参数时,从@user到@foo,旧的[不正确]缓存版本再次显示(而不是使用正确的数据刷新).
如何手动使此过期,或以其他方式摆脱显示的这些错误数据?
yel*_*ign 39
我最后通过进入rails控制台并使用命令手动清除整个缓存:
Rails.cache.clear
Run Code Online (Sandbox Code Playgroud)
Joh*_*ian 23
从rails控制台:
Rails.cache.delete 'FRAGMENT-NAME'
Run Code Online (Sandbox Code Playgroud)
Adi*_*ena 20
这个给你:
<% ActionController::Base.new.expire_fragment("foo_header_cache_#{@user.id}") %>
Run Code Online (Sandbox Code Playgroud)
参考:
- 如何从Rails Observer/Model调用expire_fragment?
从控制台:
你可以运行它(即如果你知道id是'1')
ActionController::Base.new.expire_fragment("foo_header_cache_1")
Run Code Online (Sandbox Code Playgroud)
要使用,Rails.cache.delete
您需要知道片段名称.在你的情况下,它会
Rails.cache.delete("views/foo_header_cache_1") # Just add 'views/' to the front of the string
Run Code Online (Sandbox Code Playgroud)
如果您有使用对象的基于数组的缓存键,例如:
cache([:foo_header_cache, @user])
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样得到片段名称
ActionController::Base.new.fragment_cache_key([:foo_header_cache, @user])
Run Code Online (Sandbox Code Playgroud)
名称包括来自任何对象的时间id
和updated_at
时间(到yyyymmddhhmmss).它会像"views/foo_header_cache/users/1-20160901021000"
或者只是使用数组清除它.
ActionController::Base.new.expire_fragment([:foo_header_cache, @user])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15493 次 |
最近记录: |