我正在尝试运行在同一个 VirtualHost
上配置的两个 wsgi 应用程序。其中一个应用程序 myapp
是指定的标准 hello-world 代码 here .它加载绝对没问题。另一个应用程序 uiapp
是一个 Django 站点。它因 ImportError
而失败。
我读入了wsgi docs python-path
的值附加到 sys.path
,所以这就是我在 WSGIDaemonProcess
中为 uiapp< 指定的内容
.
我不知道问题出在 Python 代码还是 Apache 配置上。
这是我的虚拟主机配置:
[ . . . ]
# processGroups
WSGIProcessGroup uiapp
WSGIProcessGroup myapp
# configurations for django sites
WSGIScriptAlias /uiapp "/some/path/ui_dir/site_prod/wsgi.py"
WSGIScriptAlias /myapp "/some/other/path/myapp.wsgi"
# daemons
WSGIDaemonProcess uiapp processes=2 threads=25 display-name=site_prod_wsgi python-path=/some/path/ui_dir
WSGIDaemonProcess myapp processes=2 threads=25 display-name=helloworld_wsgi
# doc root for /uiapp
<Directory "/some/path/ui_dir/site_prod">
Order allow,deny
Allow from all
</Directory>
# doc root for /myapp
<Directory "/some/other/path">
Order allow,deny
Allow from all
</Directory>
[ . . . ]
我试图将 uiapp
的 python-path
更改为 /some/path/ui_dir/site_prod
,但即使这样也失败了有同样的错误。
错误日志是:
mod_wsgi (pid=32652): Exception occurred processing WSGI script '/some/path/ui_dir/site_prod/wsgi.py'.
Traceback (most recent call last):
File "/home/usr/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 219, in __call__
self.load_middleware()
File "/home/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 39, in load_middleware
for middleware_path in settings.MIDDLEWARE_CLASSES:
File "/home/usr/local/lib/python2.7/site-packages/django/utils/functional.py", line 184, in inner
self._setup()
File "/home/usr/local/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup
self._wrapped = Settings(settings_module)
File "/home/usr/local/lib/python2.7/site-packages/django/conf/__init__.py", line 95, in __init__
raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'site_prod.settings' (Is it on sys.path?): No module named site_prod.settings
这是/some/path/ui_dir/site_prod/wsgi.py
的来源
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_prod.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)
请帮我弄清楚我做错了什么。
最佳答案
你不能像这样连续使用两个 WSGIProcessGroup 指令。只会使用最后一个。因此,您实际上是将两个应用程序发送到同一个守护进程组,而不是不同的。完成此操作并将它们置于同一进程中后,您将遇到 setdefault() 问题,如以下所述:
将 WSGIProcessGroup 指令移动到与相应 WSGI 脚本文件位置相关的目录 block 内。
关于python - 在守护进程模式下使用 mod_wsgi 在 Django 站点中导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13532182/