python paste不显示错误跟踪

时间:2012-02-21 07:54:05

标签: python django passenger dreamhost

我使用Passenger WSGI according to their wiki instructions设置了一个在Dreamhost上托管的Django项目,并遇到了弹出内部错误并崩溃mod_wsgi的问题。

我通过following their instructions安装了Python Paste以获取网页中显示的综合日志,但它不起作用。 IE:任何时候我有内部错误,我仍然得到django的“内部错误”页面,浏览器中没有任何其他信息。

当我通过删除“def testapplication”前面的“test”来测试paste的安装时,这很好用。但是每当我遇到内部错误时,我仍然没有获得带有完整错误信息的粘贴输出。相反,我得到了同样神秘的内部错误页面,没有任何信息。

根据他们的wiki,我的配置是正确的:

我的passenger_wsgi.py文件:

import os, sys
import django.core.handlers.wsgi

INTERP = os.path.join(os.environ['HOME'], 'env', 'bin', 'python')
if sys.executable != INTERP:
    os.execl(INTERP, INTERP, *sys.argv)

os.environ['DJANGO_SETTINGS_MODULE'] = "abc.settings"

sys.path.append(os.getcwd())
sys.path.append(os.path.join(os.getcwd(), 'abc'))
log = file('/home/abcadmin/passengerwsgi.log', 'a')
print >>log, "Running %s" % (sys.executable)

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

from paste.exceptions.errormiddleware import ErrorMiddleware
sys.stdout = sys.stderr

# remove the "test" below to test paste
def testapplication(environ, start_response):
    status = '200 OK'
    output = 'Hello World! Running Python version ' + sys.version + '\n\n'
    response_headers = [('Content-type', 'text/plain'),
               ('Content-Length', str(len(output)))]
    # to test paste's error catching prowess, uncomment the following line
    # while this function is the "application"
    raise("error")
    start_response(status, response_headers)    
    return [output]

application = ErrorMiddleware(application, debug=True)

我的网络服务器错误日志(error.log)为空,我的访问日志(access.log)中包含如下消息(最新行 - 使用虚假链接编辑)。在某处发生了日志记录,因为access.log正在记录某些内容,但错误并未显示在任何地方 - 除了那个神秘的“内部错误”页面。

46.246.117.3 - - [21/Feb/2012:00:27:04 -0800] "GET /admin/ HTTP/1.1" 200 2326 "http://abc.acme.com/admin/userProfile/profile/16/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"

Django项目在我的开发环境中运行良好,但是当它在服务器上运行Passenger WSGI时会出现某种服务器问题 - 我安装了Paste来尝试调试这些错误。当我的安装遇到任何类型的非Django错误时,我得到了那个神秘的“内部错误”消息。

2 个答案:

答案 0 :(得分:1)

如果某处有编译器错误,它甚至可能无法达到知道你想要使用粘贴错误处理程序的程度。看看你的错误日志。

答案 1 :(得分:0)

在这种情况下我也没有使用粘贴失败,但是对于服务器上wsgi设置的问题 - 这个问题可能是关于这样的问题---请参阅Debugging Techniques这是一个"官方"我认为modwsgi doc。在该文档中搜索"对于更复杂的问题"并尝试在该段落下面的免费middlware代码---但通过用pprint.pprint替换它来纠正pprint.pprint((status,headers)+ args),stream = self .__ oheaders)中的语法错误( ((status,headers)+ args),stream = self .__ oheaders)。

我还将课程改为"新课程"通过添加"(对象)"到了班级宣言......抱歉,但如果这有意义,我现在忘了。

使用该中间件,您将获得完整的请求和响应标头和内容,因为它们都会从您的应用程序进出。

我还发现使用Djano的内置Python日志增强功能是合适的,这些增强功能是使用settings.py中的LOGGING设置实现的。以下是docs