我有一些不適合模型或控制器盒子的Rails代碼。根據this answer,我創建了一個app/classes
目錄。 Rails 3似乎自動將此添加到Rails中的「加載路徑」,我的應用程序正確地找到我在那裏定義的類,而無需使用require
語句。Rails 3.2.x:如何在開發過程中重新加載app/classes目錄?
但是app/classes
中的代碼沒有在開發模式下重新加載;如果我進行了更改,我需要重新啓動服務器才能看到更改。
在Rails 3.2.x中製作給定目錄「可重載」的正確方法是什麼?一些答案在這裏建議這樣做:
config.autoload_paths += %W(#{config.root}/app/classes)
,但我相信,這僅僅是具有將app/classes
最初設定的目錄中找到的代碼的效果;似乎並沒有使它們可以爲每個請求重新加載(而且在3.x中似乎自動添加了app/*
)。
更新:
圖,我偶然發現瞭解決方案張貼問題後僅30秒時:
我有我的包裹類的模塊內。一旦我刪除了周圍的「MyModule」,它突然變得可重新加載。來自Java背景,被Ruby代碼燒燬,污染了全局命名空間,我養成了將所有內容放在模塊中的習慣。我猜Rails的「應用程序」代碼必須活在任何模塊之外?
嘗試在'classes'下創建一個子目錄,其中包含您的模塊名稱,然後將所有模塊的類放入其中。我懷疑如果一個名爲'bar.rb'的文件改變了,只有在使用類Bar時纔會重載,但如果全名實際上是Foo :: Bar則不會重載 - 那麼它會查找一個名爲'foo/bar.rb'重新加載。只是猜測,但。 – Thilo 2012-07-13 14:18:51