Я был в той же лодке, что и вы, мне не понравился механизм по умолчанию. К счастью, настраиваемая обработка исключений с помощью web2py очень проста. Взгляните на route.py в корне вашего каталога web2py. Я добавил к себе следующее:
route_onerror = [('имя_приложения/*','/имя_приложения/ошибка/индекс')]
Это направляет любые исключения в мой контроллер обработчика ошибок (application_name/controllers/error.py), в котором я определил свой индекс определения как:
def index():
if request.vars.code == '400':
return(dict(app=request.application,
ticket=None,
traceback="A 400 error was raised, this is controller/method path not found",
code=None,
layer=None,
wasEmailed=False))
elif request.vars.code == '404':
return(dict(app=request.application,
ticket=None,
traceback="A 404 error was raised, this is bad.",
code=None,
layer=None,
wasEmailed=False))
else:
fH = file('applications/%s/errors/%s' % (request.application,request.vars.ticket.split("/")[1]))
e = cPickle.load(fH)
fH.close()
__sendEmail(request.application,e['layer'],e['traceback'],e['code'])
return(dict(app=request.application,
ticket=request.vars.ticket,
traceback=e['traceback'],
code=e['code'],
layer=e['layer'],
wasEmailed=True))
Как видите, для ошибок, отличных от 400 и 404, я отправляю трассировку себе по электронной почте, а затем вызываю соответствующий файл views/error/index.html. В производственной среде это представление дает общее сообщение «Извините, произошла ошибка, разработчикам отправлено письмо по электронной почте». На моем сервере разработки он отображает отформатированную трассировку.
person
Mark
schedule
17.08.2010