Ruby on rails 动作缓存未正确过期,即使我可以看到它';有人叫他

Ruby on rails 动作缓存未正确过期,即使我可以看到它';有人叫他,ruby-on-rails,ruby,caching,actioncontroller,sweeper,Ruby On Rails,Ruby,Caching,Actioncontroller,Sweeper,我有一辆清扫车,它应该会让一些行动缓存过期。即使调试器在调用expire\u操作之前立即停止,但实际上并没有使操作过期。知道会发生什么吗 以下是相关的清扫器和控制器 #company_sweeper.rb(在“models”目录中) class CompanySweeper'reports',:action=>'full\u report')的expire\u action url\u一样简单您公司的controller中是否也有cache\u-sweeper声明?清扫器必须包含在对相关模型执行

我有一辆清扫车,它应该会让一些行动缓存过期。即使调试器在调用expire\u操作之前立即停止,但实际上并没有使操作过期。知道会发生什么吗

以下是相关的清扫器和控制器

#company_sweeper.rb(在“models”目录中)

class CompanySweeper调试器我认为这里没有足够的细节来真正回答您的问题,但这里有一些问题:

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


编辑: 哦,你知道吗,我刚刚深入研究了这个问题,它看起来像是在控制器的上下文中运行的expire_操作(我在读actionpack中的gem源代码)。它假定“self”是一个控制器,因此您传入的选项:controller将被忽略

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


也许您应该切换到该方法,确保它工作,然后在调试器中查看您是否有权访问的url_。它可以像(:controller=>'reports',:action=>'full\u report')的
expire\u action url\u一样简单

您公司的controller中是否也有
cache\u-sweeper
声明?清扫器必须包含在对相关模型执行生命周期操作的控制器中。除非您在ReportsController中处理公司实例,否则,
cache\u sweeper
行不属于该行


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

有什么想法吗?…有人吗?:-)谢谢你的提示…除了你让我做的事情,你认为什么样的附加信息可以帮助我们找出问题点?我的评论不合适!我已经回答了:)祝贺你,马德森先生。缓存清理程序实际上位于错误的位置。谢谢你的提示!
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
class ReportsController < ApplicationController
  layout false
  caches_action :full_report, :supplier_list, :service_categories
  cache_sweeper :company_sweeper

  def full_report
      #do stuff...
  end
end