守护进程模式下 mod_wsgi 的 Django 站点中出现导入错误

Uno*_*nos 2 python apache django mod-wsgi

我正在尝试运行在同一VirtualHost. 其中一个应用程序是此处myapp指定的标准 hello-world 代码。它加载得非常好。另一个应用程序是 Django 网站。它失败并显示.uiappImportError

我在wsgi 文档中读到, 的值python-path附加到sys.path,所以这就是我在WSGIDaemonProcessfor中指定的值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>

    [ . . . ]
Run Code Online (Sandbox Code Playgroud)

我尝试将python-pathfor更改uiapp/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
Run Code Online (Sandbox Code Playgroud)

这是来源/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)
Run Code Online (Sandbox Code Playgroud)

请帮助我弄清楚我做错了什么。

Gra*_*ton 5

您不能像这样连续有两个 WSGIProcessGroup 指令。仅使用最后一个。因此,您实际上将两个应用程序发送到同一个守护进程进程组,而不是不同的进程组。完成此操作并将它们置于同一进程中后,您将遇到 setdefault() 问题,如下所述:

将 WSGIProcessGroup 指令移动到与相应 WSGI 脚本文件位置相关的目录块内。