Django 中 WSGI 的 500 错误

Mik*_*ike 4 django wsgi

我正在部署我的第一个 Django 项目,我觉得我非常接近,但只是需要一些帮助来克服这一问题。这是问题所在:

我的 httpd.conf 更改如下所示:

WSGIScriptAlias / /home/miketnc/frontend/tncsite/wsgi.py
WSGIPythonPath /home/miketnc/frontend/tncsite

<Directory /home/miketnc/frontend/tncsite>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,wsgi.py 中的“hello world”脚本运行得很好。当我使用 Django doc-recommended wsgi 脚本时,问题就出现了:

import os, sys

sys.path.append('/home/miketnc/frontend/tncsite')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tncsite.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)

这会导致 500 错误:

File "/home/miketnc/frontend/tncsite/wsgi.py", line 10, in ?
mod_wsgi (pid=15494): Exception occurred processing WSGI script '/home/miketnc/frontend/tncsite/wsgi.py'.
mod_wsgi (pid=15494): Target WSGI script '/home/miketnc/frontend/tncsite/wsgi.py' cannot be loaded as Python module.
Run Code Online (Sandbox Code Playgroud)

我在错误中看到的所有支持都与 apache 中的错误安装有关,没有找到模块等,如果“hello world”正在运行,则情况并非如此。

有任何想法吗?

更新

在新服务器上重新启动后,我设法稍微向前推进了一步。好消息是 python 和 WSGI 似乎运行良好,坏的是我现在遇到了不同类型的 500 错误。

我在日志中返回的唯一错误是:“[Mon Dec 05 18:22:45 2011] [error] [client ip] mod_wsgi (pid=19804):处理 WSGI 脚本时发生异常 '/home/miketnc/前端/tncsite/apache/wsgi.py'。”

Hello World 脚本仍然运行良好,错误的触发器是最后一行:

application = django.core.handlers.wsgi.WSGIHandler()
Run Code Online (Sandbox Code Playgroud)

我已将包含项目的所有目录从 frontend/ 设置为 777,并添加了一个守护进程作为我自己:

LoadModule wsgi_module /usr/local/apache/extramodules/mod_wsgi.so
AddHandler wsgi-script .wsgi

WSGIDaemonProcess miketnc processes=2 maximum-requests=500 threads=1
WSGIProcessGroup miketnc

WSGIScriptAlias / /home/miketnc/frontend/tncsite/apache/wsgi.py

<Directory /home/miketnc/frontend/tncsite>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)

任何人都可以就如何使其工作提供进一步的建议?

Gra*_*ton 5

在你的情况下:

WSGIPythonPath /home/miketnc/frontend/tncsite
Run Code Online (Sandbox Code Playgroud)

是多余的,因为您正在 WSGI 脚本文件中设置 sys.path。

您缺少的是添加站点的父目录:

sys.path.append('/home/miketnc/frontend')
Run Code Online (Sandbox Code Playgroud)

这是添加“/home/miketnc/frontend/tncsite”的现有行的补充。

读:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

并观看:

http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Conference_Presentations

其中谈论路径和权限。