2009-11-15 3 views
1

Alors, je tire mes cheveux ici, et peut-être que quelqu'un a un aperçu.Django: les entrées de débogage sont juste en train de disparaître

J'ai un cronjob qui boucle sur tous mes objets Link, fait quelques trucs, peut changer les propriétés sur l'objet et fait un save(). C'est tout.

De temps en temps (environ une fois par heure), une de mes lignes disparaît. Poof. Rien dans les journaux. Donc, j'essaie d'ajouter des instructions de débogage partout, mais y a-t-il des raisons flagrantes pour une entrée à disparaître? Le seul moyen de supprimer une entrée consiste-t-il à appeler le delete()?

Juste des directions générales pour aller serait merveilleux, merci.

Quelques idées que j'ai eu:

  • git push alors que le cronjob est en cours d'exécution
  • une suppression en cascade est les effaçant
  • une méthode de django appelle supprimer à une exception
+1

La réponse générale est, "C'est un mystère très bien." Je ne pense pas que quiconque puisse avoir un aperçu à ce sujet sans voir le code pour le travail cron et le code pour le modèle. – hughdbrown

+0

Se pourrait-il que lorsque le cronjob le fasse, il ne sauvegarde pas un objet? Peut-être que certaines conditions vous manquent. – Geo

Répondre

1

Vous pouvez utiliser django-logging avec LOGGING_LOG_SQL = True pour enregistrer tout le SQL, de sorte que vous pouvez voir si des suppressions se produisent.

+0

Yay! C'était une suppression en cascade. Je vous remercie! –

2

Vous pouvez remplacer la méthode delete de votre classe Link et vider une trace de pile ou consigner un message pour voir si cela se produit réellement depuis votre application Django.

import sys, traceback 

def delete(self): 
    super(Link, self).delete() 

    try: 
     assert False 
    except AssertionError, e 
     traceback.print_tb(file=sys.stdout) 

Il peut y avoir une meilleure façon d'obtenir et de consigner une trace de pile, mais c'est la première chose qui vient à l'esprit.

Questions connexes