0

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

def expire_topic_articles_cache_for topic_id
  key = fragment_cache_key :controller => :articles, :action => :index, :topic_id => topic_id
  Rails.logger.debug "主题 #{topic_id} 的文章列表缓存过期"
  Rails.logger.debug “使用键 #{key}”
  # 由于片段覆盖多个页面,所以使用正则表达式
  expire_fragment %r{#{key}}
结尾

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

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

4

1 回答 1

0

叹息......在这里挖了一段时间后,我找到了这个答案:

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

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

于 2013-07-29T19:45:30.753 回答