2011-12-09 5 views
0

저는 ActiveResource로 작업하기 시작했습니다. 그래서 몇 비트의 모델을 캐싱하기로 마음 먹었습니다. 알았어 괜찮아.ActiveResource models + 스위퍼

나는 만료 된 캐시를 살펴본 후 스위퍼를 구현하기로 결정했다. 이것은 작동하지 않습니다.

AR 모델 :

class Myresource < ActiveResource::Base 
    extend ActiveModel::Callbacks 
    define_model_callbacks :update 

    "stuff" 

    def current 
    Rails.cache.fetch("/key/#{self.id}", :expires_in => 5.minutes) do 
     Myresource.find(ID) 
    end 
    end 

end 

스위퍼 :

class MyresourceSweeper < ActionController::Caching::Sweeper 
    observe Myresource 

    def after_update(myresource) 
    expire_cache_for_myresource 
    end 

private 
    def expire_cache_for_myresource 
    Rails.cache.delete '/key/myresource.id' 
    end 
end 

컨트롤러 :

cache_sweeper :myresource_sweeper 
그래서 AR 및 캐시와 스위퍼 만 비트와 함께 일 한

, 난 못해 그림 다양한 것들을 시도해 보면서 어디를보아야할까요? 설정 및 리소스에 대한 콘솔에서 만료 있지만 응용 프로그램 내에서 캐시를 가져옵니다 얻을 수 있지만 내가 한 짓을 삭제 트리거하는 것입니다.

제안 사항?

답변

1

게시 한 코드에 오타가 있습니다. 나는 좀이 당신의 진짜 문제가 의심하지 않지만, 그것은 가치가 무엇인지, 나는 다음과 같이 당신이 당신의 스위퍼를 작성하는 의미 생각 :

class MyresourceSweeper < ActionController::Caching::Sweeper 
    observe Myresource 

    def after_update(myresource) 
    expire_cache_for_myresource(myresource) 
    end 

    private 
    def expire_cache_for_myresource(myresource) 
    Rails.cache.delete "/key/#{myresource.id}" 
    end 
end 

일예 게시 한 원래 코드에서 리소스를 expire_cache_for_my_resource 메서드로 전달하지 않아 동일한 정적 키가 계속해서 만료되었습니다.

+0

예, 오타는 실제 코드를 예를 들어 번역 할 때 사용되었습니다. 그보다 조금 더 복잡했지만 myresource를 제대로 전달하지 못했습니다 (당시에 내가 필요로하는 모델에 후크를 넣는 작업을하면서 제거한 부분에서 , 어쨌든). 이걸 옆에 놓고 돌아 왔을 때 바로 발견되었습니다. 감사. – blueblank