2010-08-06 48 views

回答

2

這也可以通過不使用lib/目錄來完成,而是通過在app/helpers目錄中存儲任何類或幫助程序文件來完成。這樣,它們將在開發期間重新加載並在生產期間緩存。

8

「緩存類」我想你的意思是說,在處理新請求之前,應用程序目錄內的源文件會自動在開發環境中重新加載?

這與緩存無關,Ruby的正常行爲是一次讀取和解析源文件,並且只要進程運行就不會再次。 Rails(ActiveSupport :: Dependencies實際上)提供了一種機制來在處理請求之前重新加載整個代碼。在開發環境中,這很有用,因爲您不需要爲代碼執行任何更改就重新啓動本地Web服務器。在生產環境中,這會嚴重損害性能,因此被關閉。

默認情況下,應用程序類被標記爲可重新載入。您可以標記使用unloadable類方法在開發環境中處理的請求之前重新加載任意類:

class MyClass 
    unloadable # mark this class as reloadable before a request is processed 

    # … 
end 

要注意的是並不是每一個類可以卸載發揮出色。只要你在一個源文件中定義你的類,這個文件可以被Rails的自動加載機制發現和加載,那麼你可能是好的。但是如果您在其他地方重新開放課程以便進行校對,可能會遇到麻煩,因爲自動加載無法解決此問題。

+1

不完全。我的意思是當我將一個類(使用require和include)加載到我的應用程序中時。然後,無論何時該類在另一個頁面或另一個請求上使用,那麼rails不會再次要求文件(加載文件),它只是使用之前加載的類(因爲它保留在內存中)。這讓我很沮喪,因爲每次我對包含的lib類進行更改時,都需要重新加載rails服務器。我正在開發模式下運行它的配置緩存類設置爲false。 – matsko 2010-08-06 17:54:35

+1

我明白了。 Rails重載機制可能只適用於你的類被Rails的自動加載所覆蓋,而不是你手動需要它。我建議讓你的類通過Rails自動加載,這非常方便無論如何(你不需要它,它在任何地方工作)加載。如果這是不可能的,你可以嘗試利用Rails的自動載入功能,將自己的類文件加載到自動加載的文件中(但請確保使用#load,而不是#require,因爲只需要加載一次) – Zargony 2010-08-06 23:00:15