ruby-on-rails - 在 Rails 3 中为所有具有缓存摘要的区域设置过期片段

标签 ruby-on-rails ruby-on-rails-3 caching

我正在使用带有 cache_digests 的 Rails 3,并且我在模板中有一个片段缓存:

<% cache [I18n.locale,'city-list'] do %>
...
<% end %>

在观察者中,我想像这样使所有语言环境的缓存过期:

I18n.available_locales.each do |loc|
  ActionController::Base.new.expire_fragment("#{loc}/city-list")
end

但显然这行不通,因为我在过期调用中缺少该片段的摘要

是否有一种干净的方法来使缓存过期?

最佳答案

似乎答案是“无法使 cache_digests 与手动过期一起工作”,请参阅 DHH 的 these answers

要变通,有两种选择:

  1. 绑定(bind) key 一些模型并依赖于基于 key 的过期:<% cache [I18n.locale, city, "city-list"] do %>

  2. 跳过缓存调用中的摘要,并手动过期,如问题中所示:<% cache [I18n.locale, "city-list"], skip_digest: true do %>

关于ruby-on-rails - 在 Rails 3 中为所有具有缓存摘要的区域设置过期片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22197271/

相关文章:

php - nginx php-fpm 每秒缓存相同的多个请求

ruby-on-rails - 代理选择 : mod_proxy_balancer, nginx + 代理平衡器,haproxy?

javascript - 在 rails 上提交表单之前调用 javascript

c# - 在控制台应用程序中缓存

ruby-on-rails - 建模多对多 :through with Mongoid/MongoDB

ruby-on-rails - 如何使用 Rails 3 验证根据两个值确定唯一性范围?

Spring缓存列表并更新它的值

ruby-on-rails - Rails-使用外部 SOAP API 的最佳方式?

ruby-on-rails - 请求的资源上不存在 'Access-Control-Allow-Origin' header - Rails 4.2

ruby-on-rails - 如何正确将此 SQL 转换为 ActiveRecord?