apache - 在Apache上,使用 Django 和mod_wsgi的多个站点

  显示原文与译文双语对照的内容
0 0

我现在用两个Django应用程序( 比如 A& B) 通过Apache承载在同一个域( 但在不同端口上提供服务) 。 我相信我的安装是否正确,但我是随机获取500强同时在站点。 上的500 A主要是当某个请求被投放在发生( 比如一个字符串) B( 反之亦然) 。

检查的错误日志( 后说 A比如),我发现 A是wsgi模块正试图访问 B's settings.py文件( 它显然不出现在那里,因为项目路径不同) [ 和这并发生其他太,b 是wsgi throw exception抱怨缺少的设置。py file] 。 我不知道为什么他们必须寻找其他的设置文件中的设置的导入( py ) 所有视图上的特定于各个项目。

这是我的设置:

A权力交给在端口 8080, B权力交给在端口 80.

virtualHost :

<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>

ports .conf:

NameVirtualHost *:8080
Listen 8080
Listen 80
<IfModule mod_ssl.c>
 Listen 443
</IfModule>
<IfModule mod_gnutls.c>
 Listen 443
</IfModule>

wsgi的py'A':

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是错误日志抱怨说 B's settings.py丢失了。 请带来转机,我不知道哪里出了问题。 我不明白为什么要导入一个app将寻找另外的设置py文件?

java应用程序按预期方式工作并执行,但这并破坏随机的请求提供服务的500 ( 再让我刷新该文件会被清除) 。

谢谢 !

时间:原作者:1个回答

0 0

django会打乱geneated wsgi py的同一进程中运行多个Django实例在不同的子解释器。 要么使用mod_wsgi守护进程模式和每个委派给一个单独的守护进程进程组,好不管怎样,或者更改:

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

可以执行以下操作:

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

同样对于其他wsgi 。py文件。

原作者:
...