2013-03-01 55 views
3

我成立了一个Rails缓存清道夫象下面这样:如何从rake任务调用Rails缓存清理器?

class ArticleSweeper < ActionController::Caching::Sweeper 
    observe Article 

    def sweep(article) 
    expire_page articles_path 
    expire_page author_path(article.author) 
    FileUtils.rm_rf "#{page_cache_directory}/articles/page" 
    end 

    alias_method :after_update, :sweep 
    alias_method :after_create, :sweep 
end 

我连接与文章控制器该缓存清扫。

高速缓存清除由于控制器的创建和更新操作而发挥作用。

但是,我更新数据库记录的主要方式是通过rake任务,它使用数据库记录上的save,update_attributes等活动记录方法。

我想过要添加一个模型观察者类并让这个类调用sweeper方法。 网上有很多评论关于如何通过模型动作而不是控制器动作触发缓存清除器。

但是对于我的应用程序,rake任务在执行时可能会添加100条记录。所以我不希望缓存清理器执行100次。因为它不会有效。

我认为最好在rake任务结束时执行一次。

于是,我就在我的耙子任务添加此:

ArticleSweeper.instance.sweep(Article.last) 

我把“调试”语句在那里,看到正在执行的扫描()方法。 但是,缓存文件不会被删除,即使相同的代码在控制器操作触发时也能正常工作。

所以我的问题是:是否有可能从rake任务触发缓存清扫方法? 如果是这样,我能做些什么来使它工作?

由于

回答