我曾希望將Rails應用程序同時用作引擎和獨立應用程序。Controlling Rails作爲引擎提取的應用程序的初始化
具體來說,我有一個新生的應用程序,我想插入到客戶的網站,但理想情況下,我想同樣輕鬆地將應用程序作爲獨立系統使用。但是,如果我的應用程序的引導版本中存在config/environments/*。rb,那麼在啓動依賴於我的引擎的應用程序啓動時,會出現未初始化常量錯誤; Rails抱怨MyEngineModule :: Application常量無法在development.rb中找到,我認爲這只是一個加載順序問題,因爲這在我運行應用程序獨立時不會發生。如果我刪除了development.rb,引用我的MyEngineModule :: Application的原始初始化器會抱怨,所以我試圖刪除它們,一切都很好。
偉大的,除了原來的應用程序不工作,因爲它的配置不見了。
是否可以對初始化加載順序(或加載路徑,引擎< Rails :: Engine類定義)進行一些調整,以防止在引擎上下文中加載原始配置和初始化程序,以及允許我將它們留在應用程序上下文中?
的簡單答案大概是這樣的,但我感覺固執,想知道怎樣才能讓我的最初目標可能:
- 提取MyEngine代碼到發動機,刪除config/environments/*文件和config/initializers/*文件,並使客戶端應用程序依賴於此。
- 製作一個「新」簡約應用程序依賴於MyEngine,並將環境文件和初始化程序移至NewApp。
假設我覺得有些不自然衝動,以保持我原來的應用程序可運行的,因爲它是,如果我想防止「發動機」加載「應用程序」的配置,有什麼處理,最好的方法是什麼?我認爲在開發過程中這只是一個真正的問題,因爲我可以阻止環境/ * .rb文件被拉入到gem本身,但我喜歡在開發引擎及其客戶端應用程序時能夠在本地進行測試。
這是我做得太完全相同的方式。 – Grocery 2011-06-15 14:49:12