我在清道夫中有以下方法:
定义主题id的expire_topic_articles_check_forkey=fragment_cache_key:controller=>:文章,:操作=>:索引,:topic_id=>topic_idRails.logger.debug"使主题#{topic_id}的文章列表缓存过期"Rails.logger.debug"使用密钥#{key}"#由于碎片覆盖多个页面,请使用RegExpexpire_fragment%r{#{key}}终止
问题在于调用fragment_cache_key。它在一个代码路径中返回正确的键,但在另一个代码通路中返回nil,两次都使用相同的topic_id调用,两次由相同的控制器触发,但来自不同的观察模型。
这对我来说毫无意义。我希望fragment_cache_key对相同的输入返回相同的结果。如果使用相同的缓存配置(这在两个代码路径中都是相同的),它应该是无副作用的。
叹息。。。在这里挖了一段时间后,我找到了这个答案:
https://stackoverflow.com/a/2275001/124536
这让我走上了正确的道路:控制器没有为触发清除器的这个特定操作配置cache_sweeper。奇怪的是,清扫器无论如何都被触发了,但只是工作不正常。