我有一个小的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
(这由hosts
的pyramid_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/