【问题标题】:ImportError in Django site with mod_wsgi in Daemon modeDjango站点中的ImportError,mod_wsgi处于守护程序模式
【发布时间】:2012-11-23 15:45:55
【问题描述】:

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

请帮助我找出我做错了什么。

【问题讨论】:

    标签: python django apache mod-wsgi


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢格雷厄姆。这解决了我的问题。您的博文解释得很清楚。
    • 感谢 Graham 在 mod_wsgi 上所做的出色工作以及此配置问题的解决方案。我遇到了同样的问题。
    【解决方案2】:

    如果您查看 django 文档版本 1.3 而不是 1.4 的先前版本,How to use Django with Apache and mod_wsgi 部分可以帮助您解决问题。我在配置虚拟主机时遇到了同样的问题。因此,不要在您的虚拟主机配置中指定python-path=/some/path/ui_dir。您可以在/some/path/ui_dir/site_prod/wsgi.py 中将以下行添加到该文件中。将这些行放在文件顶部的行之前,在导入和运行 django 的内容之前。

    代码

    import sys
    path = '/some/path/ui_dir'
    if path not in sys.path:
        sys.path.append(path)
    

    【讨论】:

      【解决方案3】:

      ...并确保您已在 wsgi.py 中设置 DJANGO_SETTINGS_MODULE

      os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.could.be.somewhere.else'
      

      【讨论】:

        【解决方案4】:

        试试这个:

        虚拟主机:

        <Virtualhost project.dev>
            DocumentRoot "/full/path/to/project/root/"
        
            WSGIScriptAlias / /full/path/to/wsgi/file/wsgi.py
        </Virtualhost>
        

        wsgi.py:

        sys.path = ['path/to/project/root'] + sys.path
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-12
          • 2011-05-09
          • 2013-02-04
          • 1970-01-01
          • 2012-03-20
          • 1970-01-01
          • 2010-10-14
          • 2011-07-18
          相关资源
          最近更新 更多