0

我正在嘗試構建一個CMS,我可以使用它來託管多個站點。我知道我最終將通過此項目重新發明一百萬次,因此我正在考慮擴展現有的開源Ruby on Rails CMS以滿足我的需求。如何擴展現有的Ruby on Rails CMS以託管多個站點?

這些需求之一是能夠運行多個站點,而只使用一個代碼庫。這樣,當我想要更新時,我可以在一個地方進行更新,並且所有網站都會反映更改。我認爲這可以通過運行應用程序的多個實例來擴展。

我認爲我可以使用域/子域來確定顯示哪些數據。例如,某人前往subdomain1.mysite.com,應用程序在數據庫中查找subdomain1的內容。

我看到的問題是大多數預先構建的CMS解決方案,它們僅被設計爲託管一個站點,包括我想使用的一個站點。所以數據庫的結構可以與一個站點一起工作。然而,我的想法是我可以通過爲每個站點「創建一個新數據庫」來克服這個問題,然後根據上面提到的基於域/子域指定要連接的數據庫。

我想在Heroku上託管這個,所以我想知道我的選擇可能是什麼。我對Amazon S3或Amazon SimpleDB並不是很熟悉,但我覺得有某種「雲數據庫」可以使這個解決方案更真實,而不是爲每個站點創建一個新的MySQL數據庫。

您認爲如何?我在想這個錯誤的方式嗎?你有什麼建議在這方面提供?

回答

0

我已經在這樣一個Rails應用上工作,並且它在那裏完成的方式是基於命名的虛擬主機,每個站點運行的db條目。如果有必要,每條記錄都被限定爲一個站點(博客文章等),而用戶可以訪問所有使用該數據庫的站點。管理員權限可以是全局的或範圍爲一個或多個站點。

當你說你會在項目中重新發明一百萬次時,你絕對正確。插件可能需要在CMS本身之上進行黑客攻擊。

在我的情況下,最終浪費了近一百萬美元的公司資金來構建該代碼庫以運行多個站點,同時仍能夠迎合每個客戶端站點的奇思妙想。它有效,但由於隨後進入代碼庫的特定於站點的黑客數量太少,因此不太可維護。如果您不必擔心迎合在您的平臺上運行的特定客戶站點,則可以使其工作。

最後,您將需要一個間接層來處理不同的網站,無論採用何種方法。我們最終將其放入數據庫本身。如果你使用你提到的不同的db-for-each-site方法,你可以將該圖層放在代碼中。我不確定哪一個是更好的方法。

我希望你能夠把它關閉。我失敗了。

另外,正如我今天所瞭解的,Heroku爲rails應用程序提供了postgres而不是mysql。