Question

J'ai MySQL partie avec Django sous WSGI. J'ai trouvé des entrées pour ce problème sur stackoverflow, mais rien avec Django spécifiquement. Google ne permet pas, à l'exception des solutions de contournement (comme le vote site chaque fois dans un certain temps, ou en augmentant le délai d'attente de la base de données). Rien de définitif. Techniquement, Django et / ou MySQLdb (j'utilise la dernière 1.2.3c1) devrait tenter une connexion si le serveur pendu la connexion, mais cela ne se produit pas. Comment puis-je résoudre ce problème sans solutions de contournement?

Était-ce utile?

La solution

show variables like 'wait_timeout';

est le réglage rejettera les « mysql gone away » erreur
mettre à une très grande valeur pour l'empêcher « gone away »
simple ou re-ping la connexion mysql après période

Autres conseils

Les développeurs de Django ont donné une réponse courte pour toutes les questions comme celle-ci dans https: // code. djangoproject.com/ticket/21597#comment:29

  
      
  • Résolution sur wontfix
  •   
     

En fait, c'est le comportement prévu après # 15119. Voir ce billet pour la raison d'être.

     

Si vous appuyez sur ce problème et ne veulent pas comprendre ce qui se passe, ne pas rouvrir ce billet, faites ceci:

     
      
  • Solution recommandée: fermer la connexion avec from django.db import connection; connection.close() quand vous savez que votre programme va être inactif pendant une longue période

  • .   
  • CRAPPY SOLUTION: augmentation wait_timeout il est donc plus longue que la durée maximale d'inactivité de votre programme.

  •   
     

Dans ce contexte, le temps de repos est le temps entre deux requêtes de base de données successives.

  • Vous pouvez créer middleware ping () la connexion MySQL (qui se reconnecter si elle a expiré) avant de traiter la vue

  • Vous pouvez également ajouter middleware pour attraper l'exception, reconnecter et réessayez vue (je pense que je préférerais la solution ci-dessus plus simple, mais il devrait fonctionner techniquement et être performants les délais d'attente en supposant sont rares. Cela suppose également une vue échoué n'a pas d'effets secondaires, ce qui est une propriété souhaitable, mais il peut être difficile à faire, en particulier si vous écrivez à un système de fichiers ainsi qu'un db dans votre vue.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top