2013-03-22 60 views
1

我們目前的設置是將Django託管在Google的appengine上,在Google的Cloud SQL上安裝MySQL數據庫。如何允許客戶端在Appengine上使用Django創建動態數據庫和連接作爲多租戶數據庫設置?

用戶(客戶端)通常是我們爲多租戶數據庫結構(每個客戶端有1個數據庫)提供子域的小型企業。

作爲用於確定哪個請求應該打了哪些數據庫中,有一個現有的中間件,其條請求路徑,以獲得子域和由此返回在settings.py

from django.conf import settings 
import threading 
currentCompanyConnection = threading.local() 

class DatabaseMiddleware(object): 
    def process_request(self, request): 
     url = request.build_absolute_uri() 
     if url.find("http://") < 0: 
      company = url.split("https://")[1].split(".")[0] 
     else: 
      company = url.split("http://")[1].split(".")[0] 
     global currentCompanyConnection 
     if company in settings.DATABASES: 
      currentCompanyConnection.company = company 
     else: 
      currentCompanyConnection.company = 'default' 
     request.currentCompany = str(currentCompanyConnection.company) 
     return None 

class DBRouter(object): 

    def read_and_write(self, model, **hints): 
     return currentCompanyConnection.company 

    db_for_read = read_and_write 
    db_for_write = read_and_write 

然而定義的相關數據庫別名,爲了讓我們的Web應用程序具有免費自助服務的功能,必須動態生成新數據庫,併爲註冊的每個用戶動態導入到Django的settings.py中。

最後一部分是我似乎無法弄清楚的,因爲每次更改settings.py時,我都必須再次將它部署到appengine。除此之外,我不知道如何建立與我們的Web應用程序在谷歌的Cloud SQL預先定義的表一個新的數據庫。

感謝您的幫助!我喜歡從解決工作難題,但是這是我根本沒有做過= O

回答

1

您不能修改你的源文件一旦部署。您可以修改Blobstore或數據存儲區中的內容。

我建議將設置作爲結構化數據存儲在數據存儲中,然後讓settings.py從數據存儲中讀取數據並將它們存儲爲可從其他代碼訪問的settings.py中的python對象。這應該允許你配置django連接到多個數據庫。

我不是太熟悉CLOUDSQL,但我認爲你可能仍然有啓動多個CLOUDSQL實例和路由相應流量轉發到合適實例的挑戰。

+0

感謝您的意見,我不勝感激!在settings.py中存儲動態數據庫數據可能適合配置django。 – AndyHsiung 2013-04-11 22:10:01

相關問題