2009-05-19 3 views
5

난 당신이 개발/생산 로그에 뭔가를 볼 수 있습니다, 레일에 2.3.2 액티브 쿼리가 캐시되는 즉 알고 : 같은 원칙이 작업을 긁어 적용하는 경우 궁금 해서요레이크 작업에 캐시 된 ActiveRecord 모델은 무엇입니까?

CACHE (0.0ms) SELECT * FROM `users` WHERE `users`.`id` = 1 

.

많은 모델을 쿼리 할 수있는 레이크 작업이 있으며, 내 캐싱을 구현해야하는지 또는이 동작이 기본적으로 포함되어 있는지 알고 싶습니다.

또한 rake 작업 중에 수행되는 SQL 쿼리를 볼 수있는 방법이 있습니까? 개발/생산 로그와 유사

답변

1

레이크 작업은 지정한 환경에서 실행되며,이 경우 해당 환경의 규칙이 적용됩니다.

RAILS_ENV=test 

로깅이 레이크의 한 부분으로 설정할 수 있으며 일반 레일 로그에이 표시되어야합니다

명령 줄에서 레일 ENV를 설정할 수 있습니다.

2

당신은 ActiveRecord 쿼리 캐싱에 대해 이야기하고 있습니다. Rake-Tasks에서도 작동해야합니다. 캐싱이 활성화 된 환경에서 실행해야합니다. production. 예를 들어 Rails Guide on Caching을 참조하십시오.

그것은 수도 있고 사건에 대한 캐싱의 오른쪽 종류하지 않을 수 있습니다

:

u1=User.find 1 # loads user1 first time from DB 
u2=User.find 2 # loads user2 first time from DB 
u1again = User.find 1 # loads user1 from cache 
all = User.all # loads user1 and user2 from DB again 
+0

코드의 일부에 대해 캐싱을 선택적으로 취소 할 수 있습니다. 컨트롤러에서만 가능할 수도 있습니다. 여기에 텍스트가 있습니다. "쿼리 캐시는 작업 시작시 생성되고 해당 작업이 끝날 때 파괴되므로 작업 지속 기간 동안 만 유지됩니다." 환경 로그 (위의 대답을 취하는 경우 log/test.log)를 살펴보고 반복되는 SQL 쿼리를 볼 수 있습니다. – chug2k

1

는 SQL 캐시 레이크 작업을 위해, 기본적으로 사용할 수 없습니다. 다음과 같이 캐시 블록에 코드를 래핑 할 수 있습니다.

task :foobar => :environment do 
    ActiveRecord::Base.connection.cache do 
    User.find 1 # Will hit the db 
    User.find 1 # Will hit the cache 
    end 
end 

이것은 레일스가 컨트롤러 작업을 수행 할 때 수행하는 작업입니다. 캐시는 메모리를 사용하고 레이크 작업은 큰 데이터 세트로 작업하는 경향이 있으므로 문제가 발생할 수 있습니다. uncached

관련 문제