2010-02-11 3 views
4

몇 가지 액션 캐시가 만료 된 스위퍼가 있습니다. 디버거가 expire_action을 호출하기 직전에 중지하더라도 실제로는 동작이 만료되지 않습니다. 무슨 일이 벌어 질지 상상해?액션 캐싱이 호출되는 것을 볼 수있을 때라도 올바르게 만료되지 않습니다.

다음은 관련 스위퍼 및 컨트롤러입니다.

class CompanySweeper < ActionController::Caching::Sweeper 
    observe Company 

    def after_save(company) 
    expire_cache(company) if company.final_save && company.valid? 
    end 

    def expire_cache(company) 

    debugger            <= #debugger stops here! 
                  right before the call 
                  I'm trying to make. 

    expire_action :controller => 'reports', 
        :action => 'full_report' 
    end 
end 

#의 reports_controller.rb ('모델'디렉토리)

#의 company_sweeper.rb

class ReportsController < ApplicationController 
    layout false 
    caches_action :full_report, :supplier_list, :service_categories 
    cache_sweeper :company_sweeper 

    def full_report 
     #do stuff... 
    end 
end 

나는 그것이 만료 아니에요 알고있는 방법은, 전체 보고서는 이전 데이터를 반환하고 거의 즉각적으로 반응합니다. 이상하지, 그렇지?

+0

전혀 생각하지 않으셨습니까? .... 누구? :-) – btelles

답변

5

CompaniesController에도 cache_sweeper 신고가 있습니까? 스위퍼는 해당 모델에서 라이프 사이클 동작을 수행하는 컨트롤러에 포함되어야합니다. ReportsController에서 Company 인스턴스를 사용하지 않는 한 cache_sweeper 행은 여기에 속하지 않습니다.

액션 캐싱에는 암시 적 호스트 이름이 포함됩니다. 두 개의 히트가 다른 호스트 이름으로 들어오는 경우, 캐싱은 다른 호스트 이름 아래에서 만료됩니다.

+0

축하해 Monsieur Madsen. 캐시 스위퍼는 실제로 잘못된 위치에있었습니다. 팁 고마워! – btelles

0

내가 여기 정말 귀하의 질문에 대답하기에 충분한 세부 사항이 있다고 생각하지 않지만, 여기에 몇 가지 질문은 다음과 같습니다

당신이 회사를 변경 그래서 만약 스위퍼는 full_report 액션에서 독립적으로 발생한다

, 디버거가 제대로 작동하는지 확인해야합니다. full_report 작업을 실행할 필요가 없으므로이 시점에서 캐시 된 파일이 제거되었는지 확인할 수 있습니다. 디버거에서 expire_action을 단계별로 실행하여 다른 이유로 레일스가 만료를 건너 뛰는 지 확인하는 것이 유용 할 수 있습니다.


편집 : 오, 나는 그냥이에 diggging 있었는지, 그것이 expire_action이 (내가 actionpack의 보석 소스를 읽고 있었다) 컨트롤러의 컨텍스트에서 실행 할 것으로 예상된다처럼 보인다. 그것은 '자기'가 컨트롤러라고 가정하기 때문에, 옵션에서 컨트롤러가 무시됩니다.

다른 예는 옵션 (예 : expire_action '/reports/full_report') 대신 특정 문자열을 제공합니다. 개인적으로는 맘에 들지 않습니다. 라우터를 사용하지 않고 있지만 작동 할 것 같습니다.

아마 그 방법으로 전환하여 작동하는지 확인한 다음 디버거에서 url_for에 액세스 할 수 있는지 확인해야합니다. expire_action url_for(:controller => 'reports', :action => 'full_report')

+0

팁을 주셔서 감사합니다 ... 부탁 한 바를 제외하고는 문제의 원인을 파악하는 데 도움이 될만한 추가 정보가 있습니까? – btelles

+0

내 의견을 적합하지 못했습니다! 나는 내 대답을 받아 들였다 :) – joshsz