fragment_cache_key的非确定性行为

时间:2013-07-29 19:35:55

标签: caching ruby-on-rails-3.2 sweeper

我在扫地机上有以下方法:

def expire_topic_articles_cache_for topic_id
  key = fragment_cache_key :controller => :articles, :action => :index, :topic_id => topic_id
  Rails.logger.debug "Expire article list cache for topic #{topic_id}"
  Rails.logger.debug "   using key #{key}"
  # use RegExp due to the fragment covering multiple pages
  expire_fragment %r{#{key}}
end

问题在于调用fragment_cache_key。它在一个代码路径中返回正确的密钥,但它在另一个代码路径中返回nil,两次都使用相同的topic_id调用,并且两次都由同一个控制器触发,但来自不同的观察模型。

这对我没有意义。我希望fragment_cache_key为相同的输入返回相同的结果。如果使用相同的缓存配置,它应该是无副作用的(并且在两个代码路径中都是相同的)。

1 个答案:

答案 0 :(得分:0)

叹息......在这里挖了一会儿之后我找到了这个答案:

https://stackoverflow.com/a/2275001/124536

这让我走上了正确的道路:控制器没有为触发清扫器的特定操作配置cache_sweeper。奇怪的是,扫地机无论如何都被触发但是工作不正常。