3

我设置了一个 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 等活动记录方法。

我想过添加一个模型观察者类,让这个类调用清扫器方法。网上有很多关于缓存清扫器应该如何由模型操作而不是控制器操作触发的评论。

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

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

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

ArticleSweeper.instance.sweep(Article.last)

我在其中放了一个“调试器”语句,并看到该 sweep() 方法正在执行。但是,缓存文件不会被删除,即使相同的代码在由控制器操作触发时仍然有效。

所以我的问题是:是否可以从 rake 任务中触发缓存清扫器方法?如果是这样,我该怎么做才能让它发挥作用?

谢谢

4

1 回答 1

-1

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

于 2013-11-21T17:01:27.577 回答