python - 在守护进程模式下使用 mod_wsgi 在 Django 站点中导入错误

标签 python django apache mod-wsgi

我正在尝试运行在同一个 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>

    [ . . . ]

我试图将 uiapppython-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/

相关文章:

Apache 和 mod_wsgi 中的 Django 自定义错误处理程序

asp.net - 截至目前,可用的编译服务器端语言有哪些?

django - 如何在 Django 中使用 Pusher?

php - 在此服务器上找不到请求的 URL/phpmyadmin/

python - 如何将 python 记录器定向到 Tkinker 的列表框?

python - 将 XML 字符作为字符串读入 ElementTree

python - 使用 F() 在 Django 中进行模数查询

django - 无效数据。需要字典,但在Django Rest Framework中的序列化程序字段出现str错误

python - 追加到 Pandas 多重索引

python - super().method() 和 self.method() 有什么区别