【问题标题】:Pyramid Cherrpy blank error pagePyramid Cherrpy 空白错误页面
【发布时间】:2015-10-23 08:21:12
【问题描述】:

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

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

我唯一要做的就是换行:

use = egg:waitress#main

use = egg:pyramid#cherrypy

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

我怀疑还有其他问题,因为我认为 CherryPy 应该默认显示 500 页的“某物”?

【问题讨论】:

  • 向我们展示堆栈跟踪或复制问题的方法,然后也许我们可以给您答案。最简单的方法是从 Pyramid 的入门模板开始,然后告诉我们要更改哪些内容以复制您所看到的内容。

标签: error-handling pyramid cherrypy


【解决方案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 和 waitress 上,这都会返回一个带有 HTTPInternalServerError() 的页面,包括文本。

将加注改为:

raise ValueError('test')

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

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

你可以做的是在 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 的摆布,它会为您提供一个空白页面。

【讨论】:

  • 感谢您的调查。起初它似乎不起作用 - 和以前一样的空白页。然而事实证明,设置文本生成的行:您只能将 Response.text 设置为 unicode 字符串(不是)。所以把它改成:你'出了什么问题'工作,我会用它来修改你的答案。
  • 对不起@Zitrax,我使用 Python 3,所有字符串都是 unicode。
  • 对,我仍然坚持使用 2.7。不过,“u”前缀应该对两者都适用。
  • 是的,不用担心 :-)。只是在解释为什么我没有在那里。
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多