我真的不明白的一件事是我如何將自定義啓動選項傳遞給mongrel實例。將自定義信息傳遞給mongrel_rails開始
我看到一種常見的方法是使用環境變量,但在我的環境中,這是行不通的,因爲我的rails應用程序服務於許多不同的客戶端。許多代碼是在客戶端之間共享的,但也有很多不同之處,我通過繼承控制器和視圖來實現重載或擴展現有功能或引入新功能。爲了實現這一切,我只需將路徑添加到客戶端特定模塊的模塊加載路徑($ :)。
爲了啓動特定客戶端的應用程序,我現在可以使用像say,TARGET = AMAZONE這樣的環境變量。不幸的是,在一些系統上,我運行多個混合羣集,每個羣集都服務於不同的客戶端。其中一些系統在Windows下運行,並啓動mongrel,我安裝了mongrel_services。顯然,這使得我的環境變量不合適。
將這些額外的數據傳遞給應用程序被證明是一個真正的挑戰。首先,mongrel_rails service_install將拒絕沒有記錄的任何[自定義]命令行參數。我並不擔心安裝使用安裝程序的服務是微不足道的。
但是,即使我設法安裝mongrel_services,以便在運行時將自定義命令行選項--target傳遞給mongrel_rails start,但由於mongrel_rails無法識別交換機,所以出現錯誤。
所以這裏是我看着東西:
傳遞一個額外的參數:
mongrel_rails開始--target XYZ ...
使用一個配置文件,並添加目標:XYZ,然後執行:
mongrel_rails start -C x:\ myapp \ myconfig.yml
修改文件:
紅寶石\ LIB \紅寶石\寶石\ 1.8 \寶石\雜種-1.1.5-x86的mswin32-60 \ LIB \雜種\ command.rb
也許我可以用 - 腳本選項,但我發現它的所有文檔是Unix的
1和2根本不工作。我玩了4次,但從未設法做任何事情。所以我別無選擇,只能用3.雖然它比較簡單,但我討厭更改ruby庫代碼。
特別令人失望的是2不起作用。我的意思是在配置文件中添加其他[自定義]選項是非常不合理的。其實我認爲這是一個在軌道上缺少的基本部分。不知何故,應用程序應該能夠註冊並訪問它期望的命令行參數。
如果有人有一個好主意如何使用當前的基礎設施更優雅地做到這一點,我有一個巧克力魚放棄!
除了「每個客戶都在自己的目錄中」之外,您的所有假設都是正確的。 我們的結構看起來更像: 根/應用/控制器/富 根/應用/控制器/富/ AMAZONE 根/應用/控制器/富/尼羅河 根/應用/控制器/富/金剛 根/應用程序/視圖/富 根/應用/視圖/富/ AMAZONE 根/應用/視圖/富/尼羅河 根/應用/視圖/富/金剛 根/配置 根/配置/ AMAZONE 根/配置/ Nile root/config/Kongo root/log root/log/Amazone root/log/Nile root/log/Kongo 等 客戶特定的文件夾(即Amazone,Nile,Kongo)僅在客戶需要自定義特定行爲時才存在。 – whaka 2010-04-08 22:07:25
重要的是,如果您開始說尼羅河的rails應用程序,那麼Amazone或Kongo中的任何文件都不具有任何相關性,並且如果您在路徑中刪除了Amazone或Kongo的任何文件夾,系統對尼羅河都將起到相同的作用。顯然,我們需要傳遞給啓動代碼的東西,以便確定要激活哪個實現。如果這是通過YAML文件(例如-C開關),自定義命令行開關或--script參數的內容發生的,我無所謂。 – whaka 2010-04-08 22:16:35
感謝您的澄清。這個解決方案可能會延伸Rails約定;我發現,當ROR很難時,通常意味着我偏離了慣例。交通如何導向應用程序?訪問Amazone網站的訪問者如何到達那裏而不是Kongo或Nile網站? – 2010-04-09 12:22:01