문제

나는 쇼 조치를 캐싱하는 컨트롤러가 있습니다. Show Action은 사용자가 로그인하지 않은 경우, 현재 그룹의 구성원이 아닌 경우 필터를 실행하기 전에 필터를 실행하고 리디렉션하는 데 필요한 보안 전송 필터가 있습니다. 필터가 캐싱을 켜지 않았을 때 완벽하게 작동하지만 FRAIG FRAY FILTERS에서 스위치를 돌리면 스위치가 더 이상 실행되지 않으면 (내 디버거 호출이 닿지 않음)

필터가 캐시 된 작업에 대해 호출되기 전에 항상 페이지 캐싱 및 액션 캐싱 간의 주요 차이점이 나타납니다. 이것은 Razing 캐싱에 대한 튜토리얼 섹션을 뒤로 백업합니다 :

액션 캐싱은 들어오는 웹 요청이 웹 서버에서 레일 스택 및 액션 팩으로 이동하여 캐시가 제공되기 전에 필터를 실행하기 전에 필터를 실행할 수 있도록 페이지 캐싱처럼 작동합니다. 이렇게하면 캐시 된 복사본에서 출력 결과를 여전히 제공하는 동안 인증 및 기타 제한이 실행될 수 있습니다.

왜 필터가 불리기 전에 왜 그렇지 않습니까?

My Setup에 대한 비트 : Rails 3.1 인증을위한 고안을 사용합니다. 나는 Memcached 매장을 위해 Dalli Gem을 사용하고 있습니다.

여기에 내 코드를 요약 한 몇 가지 코드가 있습니다 (많은 크루프 트 컷 아웃) :

class GroupsController < ApplicationController
  caches_action :show
  cache_sweeper :group_sweeper

  before_filter :authenticate_user!, :except => [:index]
  before_filter :init_group, :except => [:new, :create, :index]
  before_filter :requires_group_membership, :except => [:new, :create, :index]

  def show
  end

  private

  def requires_group_membership
    if current_user and !@group.users_active.index(current_user).nil?
      return true
    else
      redirect_to :root
      return false
    end
  end

  def init_group
    @group = current_user.active_groups.find_by_id(params[:id])

    if @group.nil?
      redirect_to :root
      return false 
    end
  end
.

그래서, 전에이 행동을 보았습니까? 필터와 액션 캐싱이 어떻게 작동하기 전에 어떻게 작동하는지에 대한 구멍이 있습니까? 또는 아마도 GEM 버전의 이상한 콤보로 일어나는 이상한 밥을 가지고 있습니까?

[편집]

흥미롭게도 방금 Return Value가 체인을 따라 더 이상 메소드가 실행되었는지 여부에 영향을 미치지 않으며 리디렉션 또는 렌더링이 호출되는지 여부입니다.

[편집 2]

i 앱을 Rails 3.2.3으로 업그레이드하여 효과가 있지만 문제를 해결하지 못했습니다. 내가 발견 한 무언가는 ApplicationController에 정의 된 필터가 호출되지만 My GroupScontroller의 항목이 아니라는 것입니다.

도움이 되었습니까?

해결책

잘 캐싱에 대한 새로운 티 듀드를 배우는 데는 매우 시간 이외의 방법이었습니다.

실행하려는 before_filters를 에 호출해야한다는 것이 밝혀졌습니다.나는 캐시 액션을 내 수업의 첫 번째 것 중 하나로 배치했다.이것은 Caches_Action 이후 / 이후에 등장한 것처럼 모든 것이 전면적으로 실행되지 않고 Caches_Action이 코드 실행을 중지 않고 캐시 된 결과를 제공합니다. 팬 Thomakos님께 왔습니다 ruby 문서가 아니거나 나는 그것을 훑어 낸 정보 의이 정보가 들어있는 그의 답변 나는이 작은 맹목으로 인해 잃어버린 시간을 되돌려 놓을 수있게 되었다면이 정보를 문서에 추가 할 수 있도록이 정보를 삭제할 것입니다.

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