2015-10-23 3 views
0

У меня есть небольшое приложение Pyramid, которое по умолчанию использовало веб-сервер официантки, когда я его настраивал. Однако теперь я пытаюсь перейти на CherryPy, так как он работает намного лучше с sse.Pyramid Cherrpy blank error page

Но для исключенных исключений я получил страницу с ошибкой 500 с содержимым в официантке, но с использованием черри, страницы просто пусты (статус правилен 500, хотя).

Единственное, что я сделал, чтобы переключиться было изменить строку:

use = egg:waitress#main 

к

use = egg:pyramid#cherrypy 

В documentation для CherryPy я могу прочитать, что я могу установить пользовательское сообщение об ошибке для непредвиденная ошибка. Пробовал это, но я не видел никакого эффекта, функция никогда не вызывалась - я даже попытался добавить точку останова к внутреннему ответу CherryPy, но он тоже не пострадал.

Я подозреваю, что что-то еще не так, хотя, поскольку я предполагаю, что CherryPy должен показывать «что-то» по умолчанию для 500 страниц?

+0

Покажите нам трассировку стека или способ воспроизвести проблему, возможно, мы сможем дать вам ответ. Самый простой способ - начать с шаблона стартера из Pyramid и рассказать нам, что изменить, чтобы воспроизвести то, что вы видите. –

ответ

1

я попытался воспроизвести проблему с помощью 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 для включения пользовательских сообщений об ошибках, поскольку на HTTP-сервере нет способа настроить его, который используется при использовании CherrypyWSGIServer, который используется точкой входа Pyramid cherrypy, используемой pserve ,

Что вы можете сделать, это настроить вид исключений по умолчанию в пирамиде, такие как:

@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, который будет служить вам пустой страницей.

+0

Спасибо за внимание. Сначала он не работал - такая же пустая страница, как и раньше. Однако оказалось, что строка, в которой установлен созданный текст: _Вы можете только установить Response.text в строку unicode (not) _. Поэтому, изменив его на: «Что-то пошло не так», я поправлю свой ответ. – Zitrax

+0

Извините @Zitrax, я использую Python 3, и все строки являются unicode. –

+0

Правильно, я все еще застрял на 2.7 с этим. Префикс 'u' должен работать для обоих. – Zitrax