我們應該如何最好地處理單個Rails應用程序的一部分,但在幾種不同的「模式」中使用的代碼?Rails的「子環境」 - 仍然生產(或測試等),但不同
我們有幾種不同的應用程序,它們是由相同的數據源(MySQL,MongoDB,SOLR)驅動的,並在多種不同用途中共享核心邏輯,資產等。
背景/詳細信息:
HTML VS REST API 一個常見的情況是,我們有HTML和REST接口。這些差異是通過路由處理的(例如,/api/v1/user/new
vs /user/new
) - 只有很小的差別,它們提供相同的功能。這對我來說似乎相當乾淨。
多租戶 另一種常見的情況是應用程序是「多租戶」,主要由URL的子域決定,例如, partner1.example.com和partner2.example.com(或API客戶的查詢字符串參數) - 每個都有一些不同的功能或屬性。這是通過過濾器ApplicationController
使用主要存儲在一組租戶特定數據庫表中的數據進行處理的,其中具有由方法封裝的特定於承租人的功能。這對我來說似乎也相當乾淨。
離線任務 一種情況是,數據的大量是通過一個非常大的數量的任務獲得的,幾乎連續運行:飼料裝載機,鏟運機,爬蟲和其它此類任務...你會在搜索引擎中發現的東西,這是我們所做的很大一部分。這些任務在空閒服務器實例上啓動並定期運行......但只是作爲應用程序一部分的任務的rake
。
這些任務在特徵上與我們的前端代碼不同 - 它們更新數據,運行計算,執行維護任務等 - 某些任務運行數天(例如,從外部Web服務更新30M文檔)。最終,這些任務會創建並保留我們前端應用程序使用的核心數據。
這個對我來說似乎並不乾淨,特別是在某些情況下,這些任務正在運行,並且在我們的應用程序正在使用它們的同時進行數據更新,因此偶爾需要推遲到前臺執行,當我們處於高峯負載下時,我們可以使用高端應
的應用 最後一種情況主要變種顯然是錯誤的 - 我們已經取得了我們的應用程序的主要自定義 - 15%不同的20%,通過使樹枝,然後運行作爲一個完全獨立的應用程序,共享一些核心數據有時可能會使用其他時間的某些數據。現在我們大多已經解決了這個問題,當然,這是站不住腳的。
好的,這裏有個問題在這裏,對不對?
因此,特別是對於離線任務,我覺得應用程序確實需要在「模式」或「子環境」中啓動。但是我們仍然有正常的開發,測試,qa,演示,預發佈,生產環境,這些環境有其自己的隔離數據和其他配置參數。對於其中的每一個,我們都希望能夠運行,開發,測試和部署應用程序的各種「模式」。
任何人都可以提出一個類似於標準Rails環境的聲明性概念的適當架構嗎?
感謝@alexwriteshere - 在我們的例子模式的數量很小,至少在目前,這是不切實際的單獨的應用程序,所以我覺得你的第二顆子彈適用。您的建議是否有條件地在主環境中「包含」子環境文件? – 2013-03-27 15:43:26
配置將具有創建/包含子環境中不同對象的邏輯。正如你所說的,它可以通過指向不同的每個環境配置文件或通常任何配置對象來完成。例如,如果您要配置不同的離線任務序列,那麼可以在配置中創建這些任務序列,主應用程序只需執行它們而不知道它們來自哪裏。那有意義嗎? – 2013-03-27 17:06:54
完美 - 我喜歡它。非常感謝 - 很好的答案! – 2013-03-28 13:49:16