首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作缓存没有正确过期,即使我可以看到它正在被调用

操作缓存没有正确过期,即使我可以看到它正在被调用
EN

Stack Overflow用户
提问于 2010-02-12 04:15:17
回答 2查看 815关注 0票数 4

我有个清扫器,可以让几个动作缓存过期。即使调试器在调用expire_action之前立即停止,它实际上也不会终止操作。知道是怎么回事吗?

这里是相关的清扫器和控制器。

模型(在‘#company_sweeper.rb’目录中)

代码语言:javascript
复制
class CompanySweeper < ActionController::Caching::Sweeper
  observe Company

  def after_save(company)
    expire_cache(company) if company.final_save && company.valid?
  end

  def expire_cache(company)

    debugger                                              <= #debugger stops here!
                                                             right before the call
                                                             I'm trying to make.

    expire_action :controller => 'reports', 
                  :action => 'full_report'
  end
end

#reports_controller.rb

代码语言:javascript
复制
class ReportsController < ApplicationController
  layout false
  caches_action :full_report, :supplier_list, :service_categories
  cache_sweeper :company_sweeper

  def full_report
      #do stuff...
  end
end

我知道它不会过期的方法是,完整的报告返回旧数据,并且几乎是即时响应。很奇怪,对吧?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-17 01:45:49

您的CompaniesController中也有cache_sweeper声明吗?清扫器必须包含在对相关模型执行生命周期操作的控制器中。除非您在ReportsController中使用Company实例,否则cache_sweeper行不属于那里。

操作缓存包括隐式主机名。如果两次命中来自不同的主机名,则在一个主机名下缓存,在另一个主机名下过期。

票数 5
EN

Stack Overflow用户

发布于 2010-02-16 01:32:27

我不认为这里有足够的细节来真正回答你的问题,但这里有一些问题:

清除器应该独立于full_report操作触发,因此如果您对一家公司进行了更改,您应该会看到调试器触发(它看起来像是正确发生的)。然后,您不需要运行full_report操作,因此此时您可以验证缓存的文件是否已被删除。在调试器中单步执行expire_action以查看rails是否由于其他原因跳过了过期,这可能很有用。

编辑:哦,你知道吗,我正在深入研究这个问题,看起来expire_action应该在控制器的上下文中运行(我正在阅读actionpack中的gem源代码)。它假设'self‘是一个控制器,所以你传入的option : controller会被忽略。

其他例子给出了一个特定的字符串,而不是选项(例如expire_action '/reports/full_report')我个人不喜欢这样-它没有使用路由器-但它似乎可以工作。

也许您应该切换到该方法,确保它正常工作,然后在调试器中查看您是否有权访问url_for。它可以像expire_action url_for(:controller => 'reports', :action => 'full_report')一样简单

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2247410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档