2012-01-22 9 views
6

Para un proyecto de Google Appengine escrito en Python, quiero tener mis propios mensajes de error cuando ocurre un error. Quiero usar los error_handlers como se describe en: http://code.google.com/intl/nl/appengine/docs/python/config/appconfig.html#Custom_Error_ResponsesCómo crear páginas de error personalizadas con app.yaml para Google Appengine Python

En la aplicación que utilizo webapp con debug = False

Cuando creo un error en mi código, consigo el estándar 500 Error del servidor mensaje desde el navegador .

He creado una página de error personalizada denominada default_error.html

La pregunta es: ¿Dónde guardar esta página de error personalizada?

Por cierto Este es mi app.yaml código:

application: customerrorpage 
version: 1 
runtime: python 
api_version: 1 


error_handlers: 
- file: default_error.html 

handlers: 
- url: /good.htm 
    static_files: static/good.htm 
    upload: static/good.htm 

- url:/
    static_files: static/good.htm 
    upload: static/good.htm 

- url: /.* 
    script: main.py 

Respuesta

4

Definir una costumbre 404 con sólo la parte pitón funciona para mí:

app.error_handlers[404] = handle_404

def handle_404(request, response, exception): 
    c = {'exception': exception.status} 
    t = jinja2.get_jinja2(app=app).render_template('404.html', **c) 
    response.write(t) 
    response.set_status(exception.status_int) 

Esto le da más control sobre los mensajes de error y otras dinámicas que es posible que desee mostrar.

+2

Gracias por la sugerencia. Sin embargo, no necesito definir una página de error 404 personalizada. Simplemente aceptaré todos los comentarios y respuestas de una manera ordenada. Esa es la teoría. En la práctica, podría haber cometido un error del programa, debido a que no he probado lo suficiente, o el proyecto se volvió tan popular que se produce un error de sobre-cuota. Mi suposición era que todos los errores del servidor (un error de 500) y todos los demás errores del servidor específicos de Appengine como over_quota son personalizables con app.yaml. Entonces, la pregunta es cuándo quiero usar yaml.app para manejar este tipo de errores, ¿dónde guardo mi página de error personalizada? – Hans

+1

Esta sugerencia me enseñó que probablemente usó webapp2 – Hans

0

Se ha encontrado en parte cómo funciona. Gracias a todos por sus respuestas o comentarios.

La ubicación del archivo HTM podría estar en el núcleo o en un directorio separado. Si ese es el caso, por ejemplo, uso el siguiente código en el archivo de app.yaml:

error_handlers: 
- file: error_handlers/default_error.html 

La que se muestra archivo html ahora debe ser colocado en el directorio error_handlers

Al importar un módulo no existente en el principal .py se muestra la página anterior.

Para obtener un error de 500 utilicé webapp2 para mostrar una página de error personalizada. Esta página siempre se muestra cuando ocurre un error. Incluso cuando hay un error over_quota y app.yaml está configurado correctamente. También eliminé webapp2 y usé webapp nuevamente. Ahora no se muestra ninguna página.

Tengo otra aplicación que actualmente es over_quote. ¿Cómo se muestra la página over_quota html? ¿Es un error?

+0

Puede agregar un filtro a su propiedad error_handlers. Sobre cuota se ve como, "- error_code: over_quota". Puede agregar filtros individuales para la cuota, la protección contra DoS y los tiempos de espera - https://cloud.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Custom_error_responses – Greg

Cuestiones relacionadas