“サイトフレームワーク”単一のdjangoインスタンス
質問
サイトの他の部分とは異なるサブドメインで特殊なRSSフィードを提供したい。
サイトフレームワークを使用して、単一のdjangoインスタンス内で別のurls.pyおよびsettings.pyファイルを使用できます。または、2つのapacheの場所を設定し、apache confで異なるsettings.pyファイルを設定する必要があります。
2つのurls.pyファイルを設定する必要があるのは、コンテンツの重複を避けるためです。メインサイトがrss.example.comで利用できるようにしたくないし、example.comで専用のフィードにアクセスできないようにします
単一のdjangoインスタンスからそれらを提供することは、メモリが限られた共有ホスティングであるため理想的です。また、rssのみを提供するインスタンスを開いておくのは無駄です。
編集:別々のurls.pyファイルを持つ複数のインスタンスが私にとって最も簡単だと結論付けました...しかし、単一のインスタンスを使用してそれを行う方法を説明するこの記事を見つけました:
http://effbot.org/zone/django-multihost.htm
解決策: Django tupperware
単一のdjangoインスタンスでサイトの複数のコピーを実行するためのフレームワークを書くことになりました。
基本的な考え方は、リクエストごとにその場で SITE_ID
設定を変更し、データベースから代替設定をロードすることです。ドメインに基づいてこれを行い、デフォルトで SITE_ID = 1
を使用します(何も見つからない場合)
settings.pyファイルのすべての設定はデフォルトとして機能し、現在のサイトのデータベースに保存されている設定によって上書きされます。
非常にうまく機能します:)そして、 http://rootbuzz.com
で運用されています。解決
ストックDjangoでは、サイトごとに一意の settings.py
が必要です... SITE_IDは settings.py
で定義され、サイトのキーであるためこのリクエストを処理しています。
つまり、SITE_IDはインスタンスに対してグローバルであるため、サイトごとにインスタンスが必要です。
すべてのサイト settings.py で同じ
ROOT_URLCONF
を使用することを妨げるものがないため、必要に応じて、共通の urls.py
を使用できます。 code> files ...または、サイトごとに異なるものを使用できます。この場合は、サブURLを含めて、一般的なURLで繰り返されるのを防ぎます。
単一のインスタンスから提供しようとする方法は少なくとも2つあります:
-
apache + mod_wsgi を使用し、 WSGIApplicationGroup および/または WSGIProcessGroup ディレクティブ。私は以前これらを必要としなかったので、これらが望むように機能するかどうかを完全に確信することはできませんが、mod_wsgiをデーモンモードで確実に使用してメモリフットプリントを大幅に改善することができます。
-
Djangoミドルウェアを使用して、リクエストのホスト名に基づいてURLを拒否/許可できます( DjangoドキュメントのHttpRequest.get_host())。さらに、パフォーマンスがわずかに低下する場合でも、着信ホストをチェックするすべてのビューにデコレーターを配置できます。
他のヒント
FYI-この問題に役立つdjango-dynamicsitesをリリースしました- https:// bitbucket .org / uysrc / django-dynamicsites / src