如何从rake任务调用Rails缓存清理器?

我设置了一个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任务结束时执行一次。

所以我尝试在我的rake任务中添加这个:

ArticleSweeper.instance.sweep(Article.last)

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

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

谢谢


我遇到了同样的问题,并且偶然发现了这个问题:http://www.madebymade.co.uk/blog/2013/08/cache-sweepers-invalidating-caches-from-outside-the-controller/

链接地址: http://www.djcxy.com/p/60361.html

上一篇: How to invoke Rails cache sweeper from a rake task?

下一篇: Rails Observer Alternatives for 4.0