除非手动调用,否则清扫器无法正常工作,发生了什么?

我有以下设置:一个名为Categories的模型。 使用ActiveAdmin管理这些类别。 我想使用页面缓存来缓存类别。

这就是我设置app / admin / categories.rb的方法

ActiveAdmin.register Category do controller do cache_sweeper :category_sweeper end end 

这是我的清扫工:

 class CategorySweeper  'categories', :action => 'index', :format => 'json' end end 

这是我的控制器:

 class CategoriesController < ApplicationController caches_page :index cache_sweeper :category_sweeper respond_to :json def index @categories = Category.all respond_with(@categories) end def show CategorySweeper.instance.expire_cache(@category) respond_with('manually sweeped!') end end 

因此,想法是当活动管理员发生变化时,应该调用清扫器。 我设置了debug.log并certificate它正常工作。 但由于某种原因,缓存不会过期!

但是,如果我做show动作(即转到/categories/1.json然后我的手动扫地机开始并且它工作正常)。 那么为什么扫地机只在我调用它时才工作,而不是在管理员发生变化时?

在此先感谢, – 大卫

您的ActiveAdmin控制器位于不同的命名空间,请参阅此 SO问题。

不久:

将斜杠添加到缓存过期url代码中:

 def expire_cache(category) expire_page :controller => '/categories', :action => 'index', :format => 'json' end