moztn/www-moztn

Meilleur gestion des erreurs serveur

Opened this issue · 4 comments

Plusieurs utilisateurs n'arrive pas à soumettre le formulaire de la page /contribute, et il se peut qu'il ne soit pas le seul.
Il reçoit une "Erreur 500" erreur interne au serveur.

J'ai essayé de reproduire ce qu'il a fait pour comprendre comment mais je n'ai pas eu cette erreur.

Ça serai bien d'essayer de logger ces problème, avoir une sorte de "rapport de crash" pour améliorer le site.

il a fait le test sur la version mobile (firefox os, android) ?

Non sur desktop, le problème il a aussi essayé de le faire depuis le PC de Selmi il y a eu le même problème, je ne comprend pas d'où viens le problème.

Oui j'ai testé mais ce n'est pas suffisant :/

diff --git a/moztn.py b/moztn.py
index 111a118..a8f2936 100644
--- a/moztn.py
+++ b/moztn.py
@@ -11,6 +11,8 @@ from wtforms import (
 )
 from flask.ext.mail import Message, Mail

+import logging
+


 class ContactForm(Form):
@@ -54,10 +56,32 @@ class ContributeForm(Form):
   recaptcha = RecaptchaField()


+class InvalidUsage(Exception):
+    status_code = 400
+
+    def __init__(self, message, status_code=None, payload=None):
+        Exception.__init__(self)
+        self.message = message
+        if status_code is not None:
+            self.status_code = status_code
+        self.payload = payload
+
+    def to_dict(self):
+        rv = dict(self.payload or ())
+        rv['message'] = self.message
+        return rv
+
+def log_exception(e):
+    logging.exception(e)
+    return "An Error eccured, see log :p"

 mail = Mail()

 app = Flask(__name__)
+
+app.handle_exception = log_exception
+logging.basicConfig(filename='err.log',format='=======\n%(asctime)s %(message)s')
+
 app.secret_key = 'test_key'
 app.config['MAIL_SERVER'] = 'smtp.gmail.com'
 app.config['MAIL_PORT'] = 465
@@ -79,6 +103,7 @@ mail.init_app(app)

 @app.route('/')
 def home():
+    raise InvalidUsage('Exception :(')
     return render_template('home/index.html')

 @app.route('/contribute', methods=['GET', 'POST'])
@@ -152,6 +177,5 @@ def webapp():
 def blog_redirection(e):
     return redirect('https://blog.mozilla-tunisia.org{0}'.format(request.path))

-
 if __name__ == '__main__':
     app.run(host='0.0.0.0', debug=True)