2011-07-28 21 views
8

Me gustaría capturar y manejar DeadlineExceededError para que los usuarios no vean la página estándar "Error del servidor" que App Engine arroja por defecto.¿Cómo puedo configurar un controlador global DeadlineExceededError?

Sé que DeadlineExceededErrors es not caught when overriding handle_exception en el controlador de la solicitud (ya lo hacemos).

He intentado, sin éxito hasta el momento, para utilizar el custom error_handlers app.yaml configuration así:

error_handlers: 
    - error_code: timeout 
    file: timeout.html 

... pero eso tampoco parece atrapar DeadlineExceededErrors, a menos que yo estoy haciendo algo mal.

Soy consciente de que puedo usar el siguiente patrón de atrapar DeadlineExceededErrors dentro de determinados controladores de solicitudes:

class MainPage(webapp.RequestHandler): 
    def get(self): 
     try: 
      # Do stuff... 
     except DeadlineExceededError: 
      # Many Whelps! Handle it! 

... pero me gustaría evitar la adición de esto a cada controlador de solicitudes sola en mi solicitud.

¿Cómo puedo atrapar globalmente estos retoños escurridizos?

Respuesta

3

Una posible solución es usar webapp2, que es un marco bastante ordenado y tiene muchas cosas útiles sobre la aplicación web original. Con webapp2, se puede controlar la excepción en el método handle_500, de la siguiente manera:

def BaseHandler(webapp2.RequestHandler): 
    def handle_500(request, response, exception): 
     if isinstance(exception, DeadlineExceededError): 
      response.write('Deadline exceeded!') 
     else: 
      response.write('A server error occurred!') 

     logging.exception(exception) 
     response.set_status(500) 
+0

En webapp2, podría configurar un controlador de errores para manejar código de estado 500 - utilizan sobre todo para las excepciones no capturadas. Allí, compruebe qué tipo de excepción es y maneje en consecuencia: if isinstance (exception, DeadlineExceededError): ... Los documentos están aquí: http://webapp-improved.appspot.com/guide/exceptions.html#exceptions-in- the-wsgi-app – moraes

+0

En realidad, no lo sabía; sí, ese sería un lugar más apropiado para poner el manejo del error. –

+1

Esto es lo que sugeriría. Por favor, no envíe redirecciones por errores, sírvanse: publique la página de error en la misma URL. –

Cuestiones relacionadas