私たちの現在の設定では、Django が Google の appengine でホストされ、MySQL データベースが Google の Cloud SQL に置かれています。
ユーザー (クライアント) は通常、マルチテナント データベース構造 (クライアントごとに 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 アプリケーションから Google の Cloud SQL で事前定義されたテーブルを使用して新しいデータベースを作成する方法がわかりません。
ご協力いただきありがとうございます!私は仕事の課題を解決するのが大好きですが、これは私が今までやったことのないことです =O