How do I expire a view cached fragment from consol

2020-02-21 02:50发布

Something like

Rails.cache.delete('site_search_form')

doesn't seem to work. Is this possible? Thanks.

4条回答
狗以群分
2楼-- · 2020-02-21 03:29
Rails.cache.delete "views/site_search_form"
查看更多
在下西门庆
3楼-- · 2020-02-21 03:32

ActionController::Base.new.expire_fragment(key)

查看更多
冷血范
4楼-- · 2020-02-21 03:36

Cache fragment entries are created with a slightly different key than what you access with Rails.cache.

Use expire_fragment instead (you can send it to a controller): http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html#M000438

查看更多
smile是对你的礼貌
5楼-- · 2020-02-21 03:52

In Rails 5 I took the following steps to bust the cache without resorting to skip_digest: true. Our problem was that changing the value of I18n strings does not reflect in the computed cache digest so the cache would not get busted automatically.

Here is the view where the cache block is defined:

/ views/layouts/_footer.html.slim
- cache :footer do
  span= t('shared.footer')

Then in rails console I run:

fragment = ActionController::Base.new.view_context.cache_fragment_name(:footer, virtual_path: 'layouts/_footer.html.slim')
ActionController::Base.new.expire_fragment(fragment)

cache_fragment_name will figure out the digest based on the virtual_path keyword argument.

查看更多
登录 后发表回答