我有一个小金字塔应用程序,默认情况下我在设置时使用了服务员网络服务器。但是我现在正在尝试切换到CherryPy,因为它与sse的效果要好得多。
但是对于未被捕获的异常,我在服务员中获得了一个包含内容的500错误页面,但使用cherrypy页面只是空白(虽然状态正确为500)。
我唯一要做的就是换行:
use = egg:waitress#main
到
use = egg:pyramid#cherrypy
在CherryPy的documentation中,我可以读到我可以为意外错误设置自定义错误消息。尝试过,但我看不到任何影响,函数永远不会被调用 - 我甚至试图在CherryPy的内部错误响应中添加一个断点,但它也没有被击中。
我怀疑其他事情是错误的,因为我认为CherryPy应该显示"某事"默认为500页?
答案 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的支配,他将为您提供空白页面。