Pyramid Cherrpy 空白错误页面

Pyramid Cherrpy blank error page

我有一个小型 Pyramid 应用程序,在我设置它时默认使用女服务员 Web 服务器。但是我现在正尝试切换到 CherryPy,因为它与 sse 一起工作得更好。

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

我唯一要做的就是更改线路:

use = egg:waitress#main

use = egg:pyramid#cherrypy

在 CherryPy 的 documentation 中,我可以看到我可以为意外错误设置自定义错误消息。尝试了一下,但我发现根本没有效果,该函数从未被调用 - 我什至尝试在 CherryPy 的内部错误响应中添加一个断点,但它也没有命中。

我怀疑还有其他问题,因为我认为 CherryPy 应该默认显示 "something" 500 页?

我尝试使用 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 和女服务员上,这个 returns 页面上有 HTTPInternalServerError(),包括文本。

将加注更改为:

raise ValueError('test')

但是,如果 pyramid_debugtoolbar 启用,则仅在页面上显示某些内容,并且允许访问 URL 的用户看到 pyramid_debugtoolbar(这由 hosts 设置 pyramid_debugtoolbar).

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 的摆布,它将为您提供一个空白页面。