2013-03-01 56 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任務觸發緩存清掃方法? 如果是這樣,我能做些什麼來使它工作?

由於

回答