2011-02-16 3 views
2

레일스 모델을 개발 모드로 미리로드하는 올바른 방법은 무엇입니까?레일. 개발 모드의 클래스 미리로드

배경 : 레일 2.2, 캐시 저장소로 memcahe.

레일스가 프로덕션 모드에서 시작될 때 먼저 모든 모델을 미리로드하고 캐시합니다. 개발 모드에서는 레이지 로딩을 사용합니다. Rails.cache.read ("key", User.find (0))는 레일즈 캐시에 모든 모델을 저장하는 이유입니다. 예를 들어 Rails.cache.write ("key", User.find (0)) memcache 화재, 사용자가 알 수없는 클래스/모듈입니다. 이 상황에서 클래스를 미리로드하는 올바른 방법은 무엇입니까?

답변

3

이 같은 일을 수행하여이 문제를 가져올 수 있습니다

User if Rails.env == 'development' 
@user = Rails.cache.fetch("key"){ User.find(0) } 

이 사용자 모델을 강제는 캐시 문 앞에 다시로드 할 수 있습니다. 여러 캐시 계산서를 가진 클래스가있는 경우이 작업을 수행 할 수 있습니다

class SomeController 
    [User, Profile, Project, Blog, Post] if Rails.env == 'development' 

    def show 
    @user = Rails.cache.fetch("user/#{params[:user_id]") do 
     User.find(params[:user_id]) 
    end 
    end 
end 

당신이 레일 2.X에 있고 Rails.env는 항상 RAILS_ENV 또는 ENV 사용할 수 있습니다 작동하지 않으면 [ 'RAILS_ENV를'] 대신. 물론 다른 옵션은 개발 환경에서 캐싱을 비활성화하는 것입니다. 그러면이 문제를 전혀 다룰 필요가 없습니다.