2011-11-20 83 views
0

我有一個遺留系統,我想用在Django中編寫的應用程序來擴展。該系統在同一臺服務器上託管數百個小型網站。一個Mysql服務器負責處理數據:每個網站都有自己的Mysql數據庫(從主機名派生的名稱),具有相同的表結構。所有站點(主機名和數據庫名稱)的列表都在單獨的數據庫的表中進行管理。如何用Django處理數百個相同的數據庫?

我並不需要在所有Django的用戶/會話表,或者Django管理模塊。

是否有可能寫Django的代碼,以便:

  1. 每個MySQL查詢得到一個正確的數據庫名稱(最終基於請求的Host頭)
  2. 我沒有硬編碼的主機名列表在例如。 settings.py。當一個網站被添加或重命名,一切都「正常」(或者我可以發送一個信號來重新加載網站列表)。
+1

本文介紹瞭如何可以做到這一點。這是值得一讀:http://blog.uysrc.com/2011/03/23/serving-multiple-sites-with-django/。 – alexn

回答

1

Django支持多分貝,也就是說,您可以在一個項目上使用多個數據庫。

Documentation is here

在另一方面,你的第二個需求可能無法在簡單的方法是可行的。不知何故,您必須在settings.py文件中添加新的數據庫說明。還有一種可能的方式Ø解決這個問題,但它不是一個很好的在某些方面...

當你定義一個新的網站(從像網頁中的UI界面),你可以寫一個腳本打開settings.py,並添加新的數據庫信息,數據庫架構,並將其保存並重新加載設置...但正如我所說,寫settings.py編程是很危險的。

+1

從您的應用程序寫入'settings.py'不僅危險,如果您有多個請求,那麼確實很難做到。您需要有某種鎖定機制來防止來自同一時間每個文件覆蓋部分的兩個併發請求。另外,您將爲每次請求支付這些開銷。如果你打算去那條衚衕,更好的方法可能是從管理命令編輯'settings.py'文件併爲每個站點運行* that *一次。 –