12

私は現在、Apacheを介して同じドメインでホストされている(ただし、異なるポートで提供されている) 2つのDjangoアプリケーション( A&など)を使用しています。B設定は正しいと思いますが、両方のサイトでランダムに 500 を取得しています。500 on A(たとえば) は、ほとんどの場合、要求が処理された後に発生しますB(逆も同様です)。

エラー ログ (Aたとえば) を調べると、Aさんの wsgi モジュールがBさんのsettings.pyファイルにアクセスしようとしていることがわかります (プロジェクト パスが異なるため、明らかにそこにあるわけではありません) [そして、これは実際に発生します。他の方法でも、B の wsgi は、A の settings.py ファイルがないことを訴える例外を発生させます]。他の設定ファイルを探す理由がわかりません。すべてのビューのインポート (settings.py 用) は、それぞれのプロジェクトに固有のものです。

これが私のセットアップです:

Aはポート8080で提供されています、ポートBで提供されています80

仮想ホスト:

<VirtualHost *:8080>

  ServerAdmin x@x.net
  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 x@x.net

  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>

ポート.conf:

NameVirtualHost *:8080
Listen 8080
Listen 80

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

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

「A」の wsgi.py:

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 でもまったく同じで、行 #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

ご覧のとおり、のAエラー ログには が見つからないというメッセージが表示されます。何が問題なのかわかりません。あるアプリが他のアプリの settings.py ファイルを探してインポートする理由がわかりません。Bsettings.py

どちらのアプリケーションも期待どおりに動作し、実行されますが、500 を処理するランダムな要求で壊れます (再度更新するとクリアされます)。

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

4

1 に答える 1

15

Django は、異なるサブ インタープリターの同じプロセスで複数の Django インスタンスを実行するために、生成された wsgi.py を壊します。mod_wsgi デーモン モードを使用し、それぞれを個別のデーモン プロセス グループに委譲するか、いずれにせよより良い方法にするか、次のように変更します。

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

に:

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

他の wsgi.py ファイルについても同様です。

于 2012-08-26T22:45:36.067 に答える