2012-08-26 16 views
12

私は現在、Apacheを介して同じドメインに(ただし異なるポートで提供されている)2つのDjangoアプリケーション(例:A & B)を使用しています。私はセットアップが正しいと信じていますが、私は両方のサイトで無作為に500を取得しています。 Aの500は、ほとんどの場合、リクエストがB(またはその逆)に配信された後に発生します。エラーログを検査する際にApacheでDjangoとmod_wsgiを使用している複数のサイト

(のインスタンスのAを言う)、私は(Asettings.pyファイルのWSGIモジュールはBにアクセスしようとしている "ことがわかりプロジェクトパスであるため、明らかに、そこには発生しません別の)[これは逆も同じですが、BのwsgiはAのsettings.pyファイルが見つからないという例外を発生させます]。私はなぜ彼らが他の設定ファイルを探すのか分かりません。すべてのビューのimport(settings.py用)は、それぞれのプロジェクトに固有のものです。ここで

は私の設定です:

ABがポート80上で提供されている、ポート8080上で提供されています。

のVirtualHost:

<VirtualHost *:8080> 

    ServerAdmin [email protected] 
    ServerName string1 

    Alias /static/ /home/PATH_TO_PROJECT_A/static/ 

    <Directory /home/PATH_TO_PROJECT_A/static> 
    Order deny,allow 
    Allow from all 
    </Directory> 

    WSGIScriptAlias//home/PATH_TO_PROJECT_A/wsgi.py 

    <Directory /home/PATH_TO_PROJECT_A> 
    <Files wsgi.py> 
    Order deny,allow 
    Allow from all 
    </Files> 
    </Directory> 


    LogLevel warn 
    ErrorLog /SOME_PATH/errorA.log 
    CustomLog /SOME_PATH/accessA.log combined 
</VirtualHost> 


<VirtualHost *:80> 
    ServerName string1 
    ServerAdmin [email protected] 

    Alias /APP_B/static/ /home/PATH_TO_PROJECT_B/static/ 

    <Directory /home/PATH_TO_PROJECT_B/static> 
    Order deny,allow 
    Allow from all 
    </Directory> 

    WSGIScriptAlias /APP_B /home/PATH_TO_PROJECT_B/wsgi.py/ 

    <Directory /home/PATH_TO_PROJECT_B> 
    <Files wsgi.py> 
    Order deny,allow 
    Allow from all 
    </Files> 
    </Directory> 

    ErrorLog /home/SOME_PATH/error2.log 
    CustomLog /home/SOME_PATH/access2.log combined 

    # All other files on B:80 (other than /APP_B are served normally 
    DocumentRoot /home/foo/public_html/xyz/public 

</VirtualHost> 

ports.conf:行への変更と全く

import os, sys 

sys.path.append('home/PATH_TO_PROJECT_A') #1 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PROJECT_A.settings") #2 

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

とBで同じ、 'A' に

NameVirtualHost *:8080 
Listen 8080 
Listen 80 

<IfModule mod_ssl.c> 
Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
Listen 443 
</IfModule> 

wsgi.py #1と#2。私はerror.logから取得

エラーがAから、たとえば言う:

[Sun Aug 26 17:01:49 2012] [error] [client x] Traceback (most recent call last): 
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 219, in __call__ 
[Sun Aug 26 17:01:49 2012] [error] [client x]  self.load_middleware() 
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 39, in load_middleware 
[Sun Aug 26 17:01:49 2012] [error] [client x]  for middleware_path in settings.MIDDLEWARE_CLASSES: 
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 184, in inner 
[Sun Aug 26 17:01:49 2012] [error] [client x]  self._setup() 
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 42, in _setup 
[Sun Aug 26 17:01:49 2012] [error] [client x]  self._wrapped = Settings(settings_module) 
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 95, in __init__ 
[Sun Aug 26 17:01:49 2012] [error] [client x]  raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) 
[Sun Aug 26 17:01:49 2012] [error] [client x] ImportError: Could not import settings 'PROJECT_B.settings' (Is it on sys.path?): No module named PROJECT_B.settings 

あなたはAsettings.py不足しているのエラーログがBがあることを訴える「見ての通り。光を当ててください、何が間違っているのか分かりません。 1つのアプリが他のsettings.pyファイルをインポートするように見える理由はわかりません。

アプリケーションは両方とも正常に動作し、実行されますが、500を処理するランダム要求でブレークします(再度リフレッシュするとクリアされます)。

ありがとうございました!

答えて

15

Djangoは、異なるサブインタプリタで同じプロセスで複数のDjangoインスタンスを実行するための遺伝子化されたwsgi.pyを分割します。他のwsgi.pyファイルの

同様
os.environ["DJANGO_SETTINGS_MODULE"] = "PROJECT_A.settings" 

:のmod_wsgiデーモンモードを使用し、別デーモンプロセスグループにそれぞれ委任、とにかく優れている、または変更のいずれか:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PROJECT_A.settings") 

します。

+2

ところで、この他の[質問](http://stackoverflow.com/questions/9581197/two-django-projects-running-simultaneouslyandMod-wsgi-acting-werid)は、 Graham自身が別々のデーモンプロセスグループを使用しています。私をたくさん助け、あなたは私の投票グラハムを得ました! –

+0

まだ私のために働いていない。なぜか教えてくれますか?まだ404ページ – user2771714

+0

あなたは同じ問題を抱えていると想定してはいけません。別の質問を作成し、問題の内容を正確に記述します。 –

関連する問題