문제

몇 가지 액션 캐시를 만료해야 할 스위퍼가 있습니다. Debugger가 expire_action 호출 직전에 멈추지 만 실제로 조치가 만료되는 것은 아닙니다. 무슨 일이 일어날 지 아십니까?

관련 스위퍼와 컨트롤러는 다음과 같습니다.

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

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

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

  def full_report
      #do stuff...
  end
end

내가 만료되지 않는다는 것을 아는 방식은 전체 보고서가 이전 데이터를 반환하고 거의 즉시 응답한다는 것입니다. 이상해?

도움이 되었습니까?

해결책

당신은 있습니다 cache_sweeper CompaniesController의 선언이 있습니까? 스위퍼는 해당 모델에서 수명주기 동작을 수행하는 컨트롤러에 포함되어야합니다. ReportsController에서 회사 인스턴스로 일을하지 않는 한 cache_sweeper 선은 거기에 속하지 않습니다.

액션 캐싱에는 암시 적 호스트 이름이 포함됩니다. 두 타격이 다른 호스트 이름으로 들어 오면 캐싱은 한 번에 이루어지고 다른 하나 아래에서 만료됩니다.

다른 팁

여기에 귀하의 질문에 실제로 답변하기에 충분한 세부 사항이 없다고 생각하지만 다음은 다음과 같습니다.

스위퍼는 Full_Report 조치와 독립적으로 발사해야하므로 회사를 변경하면 디버거 화재가 발생합니다 (올바르게 발생하는 것처럼 보입니다). 그런 다음 full_report 조치를 실행할 필요가 없으므로이 시점에서 캐시 된 파일이 제거되었는지 확인할 수 있습니다. Debugger에서 Frepire_action을 통해 Rails가 다른 이유로 만료를 건너 뛰는 지 확인하는 것이 유용 할 수 있습니다.


편집 : 오, 당신은 무엇을 알고, 나는 이것에 대해 방금 파고 들었고, expire_Action이 컨트롤러의 컨텍스트에서 실행될 것으로 보인다 (나는 ActionPack에서 GEM 소스를 읽고 있었다). '자아'가 컨트롤러라고 가정하므로 옵션을 통과합니다. 컨트롤러가 무시됩니다.

다른 예제는 옵션 대신 특정 문자열을 제공합니다 (예 : expire_action '/reports/full_report') 나는 개인적으로 그것을 좋아하지 않습니다 --- 라우터를 사용하지는 않지만 작동하는 것처럼 보입니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top