0

내 컨트롤러이있다 : 프로덕션 환경에서ActiveRecord 캐시가 요청 사이에서 (: 전체)를 찾는 이유는 무엇입니까?

def frontpage 
    @sections = Section.all 
end 

는, 쿼리가 요청 사이에 캐시 할 것으로 보인다. 앱을 다시 시작할 때까지 @sections은 항상 같습니다. 왜 그리고 어떻게 해결할 수 있습니까? Postgres를 프로덕션에서 사용합니다. 이유가있을 수 있습니까?

+0

어떻게 쿼리가 캐시 된 것으로 판단합니까? –

답변

1

프로덕션 환경에서 어딘가에 캐싱을 사용 가능하게 설정했다고 생각합니다. 내가 왜 말할 수 아니에요 동안, 나는 당신에게 솔루션을 제공 할 수 있습니다 :

def frontpage 
    uncached do 
     @sections = find(:all) 
    end 
end 

은 적어도이 트릭을해야을

전자 : 이것의 장점은, 그것은 단지에 영향을 미치는 것입니다 블록 안의 코드. 다른 모든 것은 여전히 ​​캐시되어야합니다.

+0

작업 자체가 캐싱되면 작동하지 않습니다. –

0

쿼리는 요청간에 캐시되지 않지만 작업은 될 수 있습니다. 컨트롤러에 cache_action 또는 다른 캐싱 메커니즘이 정의되어 있습니까?

편집 :

def frontpage 
    return render :text => Time.now.to_s 
    ... 
end 

을 그리고 그것은 변경을 참조하십시오이 캐시되는 것 액션 있는지 알아 내기 위해, 당신의 행동에 넣고.

0

관련 질문에서 this answer을 확인하십시오. 구성이 캐시되도록 설정되어 있다면, 적어도 스위치를 켜야합니다. 그렇지 않으면 특정 페이지의 캐시를 무효화하려면 컨트롤러에서 수행 할 수있는 방법을 정의 할 수 있습니다.

private 
def invalidate_cache 
    Rails.cache.delete("/sections") 
end 

당신이 호출 할 때 지정해야하지만 트릭을 할 것입니다.

관련 문제