web-dev-qa-db-ja.com

mod_wsgiを使用してApacheに複数のDjangoアプリをデプロイする

2つの異なるDjangoアプリを同じホストにデプロイしたい:最初のアプリはURL/site1に対応し、2番目のアプリはURL/site2に対応します。これが私の構成です。

 LoadModule wsgi_module modules/mod_wsgi.so 
 
 WSGIScriptAlias/site1 /var/www/py/site1/site1/wsgi.py
WSGIScriptAlias/site2/var/www/py/site2/site2/wsgi.py 
 
 WSGIPythonPath/var/www/py/site1:/ var/www/py/site2 
 
 <ディレクトリ "/var/www/py/site1/site1">
<Fileswsgi.py> 
 Order deny、allow 
 Allow from all 
 </ Files > 
 </ Directory> 
 
 <Directory "/var/www/py/site2/site2">
<Fileswsgi.py> 
 Order deny、allow 
 Allow from all 
 </ Files> 
 </ Directory> 
 

また、両方のアプリケーションのwsgi.pyファイルもあります

 import os 
 import sys 
 
 path = '/ var/www/py/site1' 
パスがsys.pathにない場合:
 sys.path.append(path)
 
 os.environ.setdefault( "Django_SETTINGS_MODULE"、 "site1.settings")
 from Django.core.wsgi import get_wsgi_application 
 application = get_wsgi_application()
 

さて、これが私の問題です。サーバーにアクセスすると、たとえば http://app1.sites.gr/site1 site1が読み込まれることもあればsite2が読み込まれることもあります!!!!私が訪問したときも同じことが言えます http://app1.sites.gr/site2 ...サイト1のウェルカムページが表示される場合もありますが、サイト2のウェルカムページが表示される場合もあります。 F5を押して、さまざまなウェルカムページを取得しています。私は過去数時間すべてをチェックしましたが、奇妙なことは何も見つかりませんでした...

気が狂う前に何が問題なのか教えてください...

ありがとう!

21
Serafeim

これは、Django 1.4によって生成されたwsgi.pyファイルの問題です。同じプロセスで2つの異なるDjangoインスタンスをホストしようとすると、機能しません。別々のサブインタープリターであっても。

変化する:

os.environ.setdefault("Django_SETTINGS_MODULE", "site1.settings")

に:

os.environ["Django_SETTINGS_MODULE"] = "site1.settings"

または、デーモンモードを使用し、それぞれを委任して、個別のデーモンプロセスグループで実行することをお勧めします。

つまり、次の代わりに:

WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py
WSGIScriptAlias /site2 /var/www/py/site2/site2/wsgi.py

WSGIPythonPath /var/www/py/site1:/var/www/py/site2

使用する:

WSGIDaemonProcess site1 python-path=/var/www/py/site1
WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py process-group=site1 application-group=%{GLOBAL}

WSGIDaemonProcess site2 python-path=/var/www/py/site2
WSGIScriptAlias /site2 /var/www/py/site1/site2/wsgi.py process-group=site2 application-group=%{GLOBAL}

更新

現在、これと他の原因についてのブログ投稿全体があることに注意してください。

47

Graham Dumpletonの応答は、おそらく最も近くで読みたいものですが、同じドメインのルート以外の場所ではなく、異なるサブドメインのルートで2つのDjangoをホストすることで、胸焼けを大幅に減らすことをお勧めします。非ルートDjangoサイトIMHOを実行するための落とし穴がたくさんあります。

幸運を!

1
Erik

アプリは同じポートでリッスンしますが、アプリを別のポートに委任するプロキシはないようです。

Apache内でVirtualHostsをセットアップするか、Nginx、lighttpdなどを使用して適切なプロキシを作成する必要があります

1