2013-03-06 2 views
0
class Test 
    def settings 
    @setting ||= load_user_env 
    end 

    def load_user_env 
    {one: 'Test'} 
    end 
end 


t = Test.new 
t.settings 
t.settings 

레일 콘솔 load_user_env은 한 번 호출되지만 WEBrick의 개발 환경에서는 매번 호출됩니다.콘솔에서 더블 파이프가 작동하지만 서버에서는 작동하지 않음

어떻게 될 수 있습니까?

+0

개발시 WEBrick을 사용합니다. 오 프린트는 죄송합니다. – Alex808

+0

매번 호출되는 것은 무엇을 의미합니까? 요청할 때마다 호출된다는 의미입니까? 그렇다면 의도 된 동작입니다 ... 변수는 요청 당 수명이 있습니다. –

답변

1

EDIT : 인스턴스 변수는 각 요청의 컨텍스트 내에서만 유지되어야하므로 요청할 때마다 다시 초기화해야합니다. 콘솔에서 t = Test.new을 수행하면 클래스의 단일 인스턴스가 생성되므로 load_user_env은 한 번만 호출됩니다. @@setting이라는 클래스 변수를 사용할 수 있습니다. 요청 및 인스턴스간에 지속되어야하며 Test이지만, dev 모드에서 클래스를 다시로드하면 어떻게 영향을 미치는지 확신 할 수 없습니다.

레일즈는 요청할 때마다 개발 모드에서 클래스를 다시로드합니다. 콘솔에서는 reload!으로 전화하지 않는 한 그렇지 않습니다.

개발 환경에 config.cache_classes = true을 설정하면 더 이상로드하지 않아야하며 더 빨리 수행해야합니다. 단점은 변경을 할 때마다 서버를 다시 시작해야한다는 것입니다.

+1

이것은 변수의 수명에 어떤 영향을 미칩니 까? 'config.cache_classes'는 클래스를 캐쉬하여 모든 요청에 ​​대해 디스크로부터의 접근을 막지 만, 인스턴스는 요청의 범위 내에서 살게 될 것입니다. –

+0

아, 네. 인스턴스 변수는 요청 범위 내에서만 유지되어야합니다. – keithepley

관련 문제