金字塔Cherrpy空白错误页面

时间:2015-10-23 08:21:12

标签: error-handling pyramid cherrypy

我有一个小金字塔应用程序,默认情况下我在设置时使用了服务员网络服务器。但是我现在正在尝试切换到CherryPy,因为它与sse的效果要好得多。

但是对于未被捕获的异常,我在服务员中获得了一个包含内容的500错误页面,但使用cherrypy页面只是空白(虽然状态正确为500)。

我唯一要做的就是换行:

use = egg:waitress#main

use = egg:pyramid#cherrypy

在CherryPy的documentation中,我可以读到我可以为意外错误设置自定义错误消息。尝试过,但我看不到任何影响,函数永远不会被调用 - 我甚至试图在CherryPy的内部错误响应中添加一个断点,但它也没有被击中。

我怀疑其他事情是错误的,因为我认为CherryPy应该显示"某事"默认为500页?

1 个答案:

答案 0 :(得分:1)

我尝试使用Pyramid附带的starter脚手架重现该问题,并对其附带的现有views.py进行了以下修改:

from pyramid.view import view_config

from pyramid.httpexceptions import HTTPInternalServerError


@view_config(route_name='home', renderer='templates/mytemplate.pt')
def my_view(request):
    raise HTTPInternalServerError()

在CherryPy和女服务员上,这将返回一个包含HTTPInternalServerError()的页面,包括文本。

将加注更改为:

raise ValueError('test')

但是,如果pyramid_debugtoolbar已启用,则只会在页面上显示内容,并且允许访问该网址的用户看到pyramid_debugtoolbar(这由hosts pyramid_debugtoolbar设置控制{1}})。

CherryPy没有自己的文字。遗憾的是,我没有看到使用_cp_config方法启用自定义错误消息的方法,因为无法在使用CherrypyWSGIServer时使用的HTTP服务器上设置它。由pserve使用的金字塔cherrypy入口点使用。

您可以做的是在Pyramid中设置默认的异常视图,例如:

@view_config(context=Exception)
def exception_view(request):
    request.response.status = 500
    request.response.text = u'Something went very wrong. Sorry!'
    return request.response

您可以在课程之外自定义此异常视图,但不管您喜欢。但是,如果此异常视图出现,您将受到CherryPy的支配,他将为您提供空白页面。