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으로 이동하면 수동 스위퍼가 작동하여 정상적으로 작동합니다). 그렇다면 왜 스위퍼는 내가 그것을 호출 할 때만 작동하고 관리자가 변경 될 때가 아닌가? 사전에

감사합니다, 다른 네임 스페이스에있는 데이비드

답변

2

귀하의 ActiveAdmin 컨트롤러, this SO 질문을 참조하십시오.

곧 :

추가 캐시 만료 URL 코드로 슬래시 :

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

야, 덕분에 너무 많은 드디어 작동합니다. 나는 하나의 질문을 가지고 : 내 노선에서 /api/v1/categories.json URL을 만드는 범위를 사용합니다. 컨트롤러에 대한 의미에서/api/v1/categories를 사용해야합니다. 하지만 캐시를 지우지 않으면 캐시가 지워지지 않습니다. 그러나 url이 /categories.json 인 경우 솔루션은 훌륭하게 작동합니다. 어떤 아이디어? – bobbypage

+0

인수로'path_prefix'를 시도하십시오. –

관련 문제