Django站点中的ImportError在Daemon mod中使用mod_wsgi

2024-06-16 09:02:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试运行配置在同一个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,但即使这样也失败了,因为同样的错误。在

错误日志为:

^{pr2}$

这是/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)

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


Tags: pathfrom应用程序uiwsgiforapplicationdir
3条回答

…并确保已在中设置DJANGO_SETTINGS_模块wsgi.py在

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

如果您查看django docs的前一个版本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)

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

将WSGIProcessGroup指令移到与各自的WSGI脚本文件位置相关的目录块中。在

相关问题 更多 >