6

サイトの他の部分とは異なるサブドメインで、特化した RSS フィードを提供したいと考えています。

サイト フレームワークを使用して、単一の django インスタンス内で異なる urls.py および settings.py ファイルを使用できますか? または、2 つの Apache の場所を設定し、Apache conf に異なる settings.py ファイルを設定する必要がありますか。

urls.py ファイルを 2 つ設定する必要があるのは、コンテンツの重複を避けるためです。rss.example.com でメイン サイトを利用できるようにしたくありません。また、example.com で専用のフィードにアクセスできるようにしたくありません。

メモリが限られている共有ホスティングを使用しているため、単一の django インスタンスからそれらを提供するのが理想的であり、rss のみを提供するインスタンスを開くのは無駄に思えます。

編集:私は、個別の urls.py ファイルを使用した複数のインスタンスが私にとって最も簡単であると結論付けました...しかし、単一のインスタンスを使用してそれを行う方法を説明しているこの記事を見つけました:

http://effbot.org/zone/django-multihost.htm

解決策: Django タッパーウェア

最終的に、単一の django インスタンスでサイトの複数のコピーを実行するためのフレームワークを作成しました。

基本的な考え方は、SITE_IDリクエストごとにオンザフライで設定を変更し、データベースから代替設定をロードすることです。ドメインに基づいてこれを行いSITE_ID = 1、デフォルトで使用します(何も見つからない場合)

settings.py ファイルのすべての設定はデフォルトとして機能し、現在のサイトのデータベースに保存されている設定によって上書きされます。

それはかなりうまく機能します :) そして、http://rootbuzz.comで実稼働環境で実行されています。

4

2 に答える 2

10

settings.pyストックDjangoでは、サイトごとに一意である必要があります... SITE_IDはで定義されsettings.pyており、サイトがこのリクエストを処理するためのキーであるためです。

つまり、SITE_IDはインスタンスに対してグローバルであるため、サイトごとにインスタンスが必要です。

すべてのサイトファイルでurls.py同じものを使用することを妨げるものは何もないので、必要に応じて共通点を設定できます。または、サイトごとに異なるものを使用することもできます。この場合、一般的なURLが繰り返されないように、サブURLを含める必要があります。ROOT_URLCONFsettings.py

1つのインスタンスから提供を試みることができる方法は少なくとも2つあります。

  1. apache + mod_wsgiを使用し、WSGIApplicationGroupおよび/またはWSGIProcessGroupディレクティブを使用します。私はこれまでこれらを必要としたことがないので、これらが希望どおりに機能するかどうかを完全に確認することはできませんが、デーモンモードでmod_wsgiを使用して、メモリフットプリントを大幅に改善することができます。

  2. Djangoミドルウェアを試して、リクエストのホスト名に基づいてURLを拒否/許可することができます( DjangoドキュメントのHttpRequest.get_host()を参照)。さらに言えば、パフォーマンスにわずかな影響がありますが、すべてのビューにデコレータを配置して、着信ホストをチェックすることができます。

于 2009-06-17T17:11:20.467 に答える
3

参考までに - この問題に役立つ django-dynamicsites をリリースしました - https://bitbucket.org/uysrc/django-dynamicsites/src

于 2011-03-27T01:42:06.857 に答える