2010-08-17 28 views
4

J'ai commencé à jouer avec web2py l'autre jour pour un nouveau projet. J'aime vraiment la structure et tout le concept qui se sent comme une bouffée d'air frais après avoir passé quelques années avec les frameworks PHP.Web2py ticket invalid links

La seule chose (actuellement) qui me dérange est le système de billetterie. Chaque fois que je fais une erreur, une page avec un lien vers un ticket est présentée. Je suppose que je pourrais vivre avec ça si le lien fonctionnait. Il pointe actuellement vers une page d'administration avec http comme protocole au lieu de https. J'ai fait un peu de lecture et le https forcé pour l'admin semble être une mesure de sécurité, mais cela fait mal au débogage.

Quelle est la solution standard ici? Modifier la page d'erreur, autoriser http pour l'administrateur et utiliser les journaux pour le débogage?

Meilleures salutations Fredrik

Répondre

4

J'étais dans le même bateau que vous, je n'aimais pas le mécanisme par défaut. Heureusement, la gestion des exceptions personnalisées avec web2py est très simple. Jetez un oeil à routes.py dans la racine de votre répertoire web2py. J'ai ajouté ce qui suit à la mienne:

routes_onerror = [('nom_application/*', '/ application_name/erreur/index')]

Ceci affectera toutes les exceptions à mon contrôleur de gestionnaire d'erreurs (nom_application/contrôleurs /error.py) dans lequel je définissais mon def index comme:

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)) 

comme vous pouvez le voir pour non-400 et 404 erreurs, je suis emailing le retraçage à moi-même et invoquer les vues correspondantes/erreur/index.html. En production, cette vue donne un générique "Je suis désolé qu'une erreur se soit produite, les développeurs ont été envoyés par e-mail". Sur mon serveur de développement, il affiche la traceback formatée.

+0

Merci pour la réponse rapide Mark, cela semble être une bonne solution! – Fredrik

0

Normalement, je viens d'utiliser http://127.0.0.1/ (si vous êtes local ou sur ssh) ou modifier/naviguer en utilisant https: // ...

Alors, vous connecter l'application admin la première fois, mais sera toujours le spectacle les billets après.