我有一个小的Pyramid应用程序,默认情况下在设置它时使用了女服务员Web服务器。但是我现在尝试切换到CherryPy,因为它在sse上效果更好。

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

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

use = egg:waitress#main


use = egg:pyramid#cherrypy

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

我怀疑还有其他问题,因为我认为CherryPy应该默认显示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和女服务员上,这都返回一个页面,上面带有HTTPInternalServerError(),包括文本。

将加薪更改为:
raise ValueError('test')

但是,如果启用了pyramid_debugtoolbar,并且仅在页面上显示一些内容,并且允许访问URL的用户看到pyramid_debugtoolbar(这由hostspyramid_debugtoolbar设置控制)。

CherryPy没有自己的文本。不幸的是,我没有使用启用自定义错误消息的_cp_config方法的方法,因为没有方法可以在使用由pserve使用的Pyramid CherrypyWSGIServer入口点使用的cherrypy的HTTP服务器上进行设置。

您可以做的是在Pyramid中设置默认的异常 View ,如下所示:
@view_config(context=Exception)
def exception_view(request):
    request.response.status = 500
    request.response.text = u'Something went very wrong. Sorry!'
    return request.response

当然,您可以根据需要自定义此异常 View 。但是,如果出现此异常 View ,您将受到CherryPy的帮助,CherryPy将为您提供空白页面。

关于error-handling - Pyramid Cherrpy空白错误页面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33297815/

10-15 11:11