无法解决Django安装程序中的mod_wsgi异常

2024-04-26 07:42:16 发布

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

我正在与我的主机提供商合作,让Django应用程序启动并运行,但我们都不是很有经验,我们基本上已经达到了一个完全的死胡同。

我没有直接访问conf文件的权限,但下面是对其内容的描述:

<IfModule mod_wsgi.c>
WSGIScriptAlias /fredapp/ /home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi
WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/
WSGIProcessGroup fred
WSGIApplicationGroup %{GLOBAL}
</IfModule>

Alias /robots.txt /home/fred/public_html/fred-site/robots.txt
Alias /favicon.ico /home/fred/public_html/fred-site/favicon.ico

Alias /settings/media/ /home/fred/public_html/fred-site/media/

我的“django.wsgi”脚本并不新奇:

import os, sys
sys.path.append('/home/fred/public_html/cgi-bin/')
sys.path.append('/home/fred/public_html/cgi-bin/fredapp/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'fredapp.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

因此,我的理解是,所有这些都意味着,如果一个请求进入domain.com/fredapp/域,那么它应该通过django.wsgi提交给应用程序。不过,我得到的唯一答复是:

[Fri Jan 22 18:46:08 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain.com/500.shtml
[Fri Jan 22 18:46:08 2010] [error] [client xx.xxx.xx.xx] mod_wsgi (pid=26760): Exception occurred processing WSGI script '/home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi'.
[Fri Jan 22 18:46:03 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain.com/404.shtml
[Fri Jan 22 18:46:03 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain

这是在Linux上的Apache下运行的。我已经尝试在服务器上的Python解释器中运行了.wsgi脚本的每一行,但是没有一行返回任何错误。我还尝试了sys.stdout = sys.stderr技巧,没有得到比上面更多的输出。文件不存在错误与站点的其余设置有关,并根据任何请求发生。我还没有完全设置好所有这些(错误页面和索引页面等),因为我只是想让应用程序本身运行。

我已经在自己的机器上安装了这个应用程序并在Apache下运行,虽然不是在守护进程模式下,但它是我的第一个Django应用程序,而且我认为我的主机提供商以前从未配置过,所以我们有点盲目。如果有人有什么建议,我将非常感激。谢谢您!


Tags: django应用程序wsgihomebindomainhtmlsys
3条回答

您的起始目录可能不是项目所在的目录吗?

今天我还设置了Apache+mod_wsgi+Django应用程序,在添加到Django.wsgi之后:

 os.chdir('/home/user/my_django_project')

一切都开始变得有魅力。

当运行Apache的用户没有读取文件的权限时,我们遇到了同样的错误。

如果引用的配置是您正在使用的,那么实际上错误是相当明显的。你有:

WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/
WSGIProcessGroup scratchf

应该是:

WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/
WSGIProcessGroup fred

也就是说,进程组的名称必须匹配。

不过,您应该看到一条错误消息:

No WSGI daemon process called 'scratchf' has been configured

这可能发生在记录的错误之前:

Exception occurred processing WSGI script

这就是为什么您必须提供所有的错误日志消息,并且不要假设它们是不相关的。

或者,您引用的配置与您正在使用的配置不同,或者不是所有的配置。


更新1

看起来您可能在Apache中启用了ErrorDocument指令,以便将错误重定向到特定的URL。因为您已经在web服务器的根目录下安装了Django,并且没有排除那些错误URL被传递给Django,那么当生成错误时,Django将获得错误文档的重定向,但是它无法解析URL并随后生成404。因为Apache看到404用于错误页重定向,所以它随后返回500个默认错误页。最终的结果是真正的原始错误和任何信息都会丢失。

因此,进入Apache配置并注释掉ErrorDocument指令。


更新2

将配置更改为:

WSGIScriptAlias /fredapp /home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi

第二行的值不应该有尾随斜杠。错过了您实际上试图挂载在子URL而不是web服务器的根目录。

相关问题 更多 >