38 votes

Google App Engine et erreur 404

J'ai configuré un site web statique sur GAE à l'aide d'indicateurs ailleurs, mais ne peut pas comprendre comment retourner une erreur 404. Mon application.fichier yaml ressemble

- url: (.*)/
  static_files: static\1/index.html
  upload: static/index.html

- url: /
  static_dir: static

avec tous les fichiers html statiques/jpg fichiers enregistrés dans le répertoire statique. Le ci-dessus fonctionne pour les fichiers qui existent, mais renvoie un fichier de longueur nulle si ils ne le font pas. La réponse est probablement à écrire un script python pour retourner une erreur 404, mais comment voulez-vous mettre les choses en place pour servir les fichiers statiques qui existent, mais de l'exécuter le script pour les fichiers qui ne le font pas?

Voici le journal de récupérer un fichier non existant (nosuch.html) sur le développement de l'application serveur:

ERROR    2008-11-25 20:08:34,084 dev_appserver.py] Error encountered reading file "/usr/home/ctuffli/www/tufflinet/static/nosuch.html":
[Errno 2] No such file or directory: '/usr/home/ctuffli/www/tufflinet/static/nosuch.html'
INFO     2008-11-25 20:08:34,088 dev_appserver.py] "GET /nosuch.html HTTP/1.1" 404 -

37voto

Alexander Kojevnikov Points 9389

Vous devez enregistrer un gestionnaire de script fourre-tout. Ajoutez ceci à la fin de votre app.yaml:

 - url: /.*
  script: main.py
 

Dans main.py, vous devrez mettre ce code:

 from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class NotFoundPageHandler(webapp.RequestHandler):
    def get(self):
        self.error(404)
        self.response.out.write('<Your 404 error html page>')

application = webapp.WSGIApplication([('/.*', NotFoundPageHandler)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()
 

Remplacez <Your 404 error html page> par quelque chose de significatif. Ou mieux, utilisez un modèle, vous pouvez lire comment faire cela ici .

S'il vous plaît laissez-moi savoir si vous avez des problèmes pour le mettre en place.

27voto

jonmiddleton Points 931

Google App Engine a maintenant des réponses d'erreur personnalisées

afin que vous puissiez maintenant ajouter une section error_handlers à votre app.yaml, comme dans cet exemple:

 error_handlers:

- file: default_error.html

- error_code: over_quota
    file: over_quota.html
 

5voto

Zee Points 1286

Une façon beaucoup plus simple de faire cela sans nécessiter de cycle de processeur consiste à placer ce gestionnaire au bas de votre application.yaml

 - url: /.*
    static_files: views/404.html
    upload: views/404.html
 

Cela vous permet ensuite de placer un fichier statique 404.html dans votre répertoire de vues. Pas besoin d'un gestionnaire de python. Tout ce qui n'est pas déjà traité dans votre application.yaml le fera déjà.

4voto

theG33k Points 142

Vous pouvez créer une fonction pour gérer vos erreurs pour n’importe quel code d’état. Vous êtes en train d'être 404, définissez une fonction comme ceci:

 def Handle404(request, response, exception):
     response.out.write("Your error message") 
     response.set_status(404)`
 

Vous pouvez transmettre n'importe quoi - HTML / texte brut / modèles dans la fonction response.out.write . Maintenant, ajoutez la déclaration suivante après votre déclaration app .

app.error_handlers[404] = Handle404

Cela a fonctionné pour moi.

2voto

Nick Johnson Points 79909

Le serveur dev_appserver renvoie déjà 404 réponses pour tout ce qui ne correspond pas au mappage, ou correspond au mappage mais n'existe pas. La réponse 404 elle-même n'a pas de corps, mais reste une 404:

 $ wget -O - http://127.0.0.1:8080/foo
--2010-10-28 10:54:51--  http://127.0.0.1:8080/foo
Connecting to 127.0.0.1:8080... connected.
HTTP request sent, awaiting response... 404 
2010-10-28 10:54:51 ERROR 404: (no description).

$ wget -O - http://127.0.0.1:8080/foo/
--2010-10-28 10:54:54--  http://127.0.0.1:8080/foo/
Connecting to 127.0.0.1:8080... connected.
HTTP request sent, awaiting response... 404 
2010-10-28 10:54:54 ERROR 404: (no description).
 

Si vous souhaitez retourner une page d'erreur plus conviviale, suivez les conseils de jonmiddleton et spécifiez une page 404 personnalisée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X