2012-05-05 3 views
2

私は以下の設定をしています:カテゴリと呼ばれるモデル。これらのカテゴリは、ActiveAdminを使用して管理されます。ページキャッシュを使用してカテゴリをキャッシュします。手動で呼び出されない限り、掃除機は動作しません。何が起こっていますか?

これは私がセットアップをしたか私のアプリ/管理/ categories.rbある

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

これは私の掃除です:

class CategorySweeper < ActionController::Caching::Sweeper 
    observe Category 

    def after_save(category) 
    expire_cache(category) 
    end 

    def after_destroy(category) 
    expire_cache(category) 
    end 

    def expire_cache(category) 
    expire_page :controller => '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を設定し、動作していることが判明しました。しかし何らかの理由でキャッシュが期限切れにならない!

しかし、私がshowアクションを実行すると(つまり、/categories/1.jsonに行くと、私の手動スイーパが起動して正常に動作します)。だから、私はそれを呼び出すときにスイーパーはなぜ働いているのですが、管理者に変更があったときではないのですか?事前に

おかげで、異なる名前空間にあります -David

答えて

2

あなたActiveAdminコントローラ、this SO質問を参照してください。

まもなく:おかげでそんなにそれが最終的に動作しますが、ちょっと

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

は、キャッシュの有効期限のURLコードにスラッシュを追加します。私は一つの質問を持っています:私のルートでは、URL /api/v1/categories.jsonを作るためにスコープを使います。その意味で、私は/ api/v1/categoriesを行うべきです。しかし、私はそれをしようとすると、キャッシュがクリアされていません。しかし、あなたのソリューションは、URLが/categories.jsonの場合にはうまくいきます。何か案は? – bobbypage

+0

引数として 'path_prefix'を試してください。 –

関連する問題