1

私たちの現在の設定では、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

4

1 に答える 1

1

デプロイ後にソース ファイルを変更することはできません。ブロブストアまたはデータストア内のものを変更できます。

設定を構造化データとしてデータストアに保存し、settings.py にデータストアからデータを読み取らせ、他のコードからアクセス可能な settings.py に Python オブジェクトとして保存することをお勧めします。これにより、複数のデータベースに接続するように django を構成できるようになります。

私は CloudSQL にあまり詳しくありませんが、複数の CloudSQL インスタンスを開始し、適切なトラフィックを適切なインスタンスにルーティングするという課題がまだあると思います。

于 2013-03-22T03:05:59.417 に答える