내가 인증 페이지를 칠 때마다, 나는 SQL 문을 발행 고안주의 사항 :.Rails Devise : 사용자 객체에 대한 devise의 데이터베이스 요청을 캐시하려면 어떻게해야합니까?
사용자 부하 (이 0.2ms) users
을 선택 * users
FROM LIMIT 1
(I (users
id
= 1). 레일 3 btw를 사용하고 있습니다. 그래서 cache_money는 해결책으로 보이고 많은 검색에도 불구하고 아무런 대안도 찾지 못했습니다.)
나는 사용자 모델에서 많은 재정의를 시도했지만 find_by_sql 만 호출 된 것 같습니다. 어느 것이 전체 SQL 문 문자열을 전달받습니다. find_by_id 나 find와 같이 직관적 인 뭔가가 호출되지 않는 것 같습니다. 이 방법을 무시하고 사용자 ID를 수집하고이를 통해 합리적인 캐시 시스템을 만들 수 있습니다.하지만 꽤 엉망입니다.
또한 authenticate_user를 대체하여 하나의 SQL 시도를 차단할 수는 있지만 current_user를 호출하면 다시 시도하는 것처럼 보입니다.
단순히 내 사용자 개체가 거의 변경되지 않고 Memcache 솔루션 대신 DB를 계속 사용하는 슬픈 상태입니다. (그 캐시를 무효로하는 것에 대한 모든 책임을 기꺼이 받아들이라고 가정하십시오 : after_save는 그 해결책의 전부는 아니지만 일부분으로).
Devise는 많은 검사를 수행합니다. 당신을 확인해 * 할 * (보통). 하지만 당신 말이 맞아요, 그 중 일부는 캐시 가능해야합니다. Ruby-Debug를 실행하여 다른 find가 어디에서 왔는지 알아 냈습니까? 나는 소스에서 find_by_sql을 보지 못했습니다. 일반적인 경우는 Devise가 보호하는 페이지를 방문하고 로그인 한 사용자가 사용자가 실제로 유효한지 확인하는 것입니다. 왕복 여행을 캐싱 할 수 있다면 많은 문제를 해결해야합니다. 더 어렵습니다 : Devise 자체가 캐시를 무효화 할 수있는 방법에는 여러 가지가 있습니다. 예를 들어, 사용자가 암호를 다시 설정할 경우. –