动作缓存未到期的正确,甚至当我看到它被称为
-
20-09-2019 - |
题
我有一个本应到期的几个动作缓存清道夫。即使调试器会立即停止该呼叫之前expire_action,它实际上没有到期的动作。任何想法可能是什么回事?
下面是相关清扫和控制器。
#company_sweeper.rb(在 '模型' 目录)
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
class ReportsController < ApplicationController
layout false
caches_action :full_report, :supplier_list, :service_categories
cache_sweeper :company_sweeper
def full_report
#do stuff...
end
end
我知道这是不是过期的方式是,报告全文返回旧数据,并响应几乎瞬间。奇怪的,是吗?
解决方案
你有你的CompaniesController一个cache_sweeper
声明吗?清扫机必须包含在执行上有问题的模型的生命周期动作控制器。除非你做的事情,在ReportsController公司情况下,cache_sweeper
行不属于那里。
动作缓存包括一个隐式的主机名。如果两个命中来在不同的主机名,缓存一个和到期下下的不同的一个来完成。
其他提示
我不认为有足够的细节在这里真正回答你的问题,但这里有一些问题:
在清扫车应该从full_report行动独立防火,所以如果你改变一个公司,你应该看到调试器火(这看起来是正确的事情)。你不那么需要运行full_report动作,所以在这一点上,你可以验证缓存的文件已被删除。这可能是有用的,通过expire_action在调试步骤,以查看是否轨道被跳过期满由于某些其他原因。
编辑: 哦,你知道吗,我只是diggging成这样了,它看起来像expire_action有望在控制器的上下文中运行(我是读ActionPack的宝石源)。它假定“自我”是控制器,所以你通过在选项:控制器被忽略
其他的例子给出一个具体的字符串,而不是选项(例如expire_action '/reports/full_report'
)我不喜欢那个人---它不使用路由器---但现在看来似乎是可行的。
也许你应该切换到该方法,确保它的工作原理,然后在调试器中看到,如果你有机会获得url_for。它可能是如expire_action url_for(:controller => 'reports', :action => 'full_report')
简单