2013-03-06 55 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 2013-03-06 15:02:03

+0

你是什麼意思,它每次都被調用?你的意思是說它被稱爲每一個請求?如果是這樣,那就是預期的行爲......變量每個請求都有一個生命週期。 – 2013-03-06 15:43:21

回答

1

編輯:實例變量應該只保留在每個請求的上下文中,所以每次發出請求時都應該重新初始化它。在你的控制檯中,當你做t = Test.new時,你創建了一個類的單個實例,所以這就是爲什麼load_user_env只被調用一次。你可以使用類變量@@setting,它應該在請求和Test的實例中保持不變,但我不確定在dev模式下重載類是如何影響的。

Rails在每個請求上重新加載開發模式中的類。在控制檯中,除非您致電reload!,否則不會。

如果你爲你的開發環境設置了config.cache_classes = true,它不應該重載它們,它也應該使它更快。不利的一面是,每次更改時都必須重新啓動服務器。

+1

這將如何影響變量的生命週期? 'config.cache_classes'緩存這些類本身,防止它們在每個請求中被從磁盤中取出,但是這些實例將在請求的範圍內生存,對吧? – 2013-03-06 15:49:43

+0

啊,是的。實例變量應該只在請求的範圍內持久。 – keithepley 2013-03-06 16:08:29

相關問題