J'ai finalement sorti mon projet au niveau de la production et j'ai soudainement des problèmes que je n'ai jamais eu à gérer en phase de développement.
Lorsque les utilisateurs publient des actions, j'obtiens parfois l'erreur suivante.
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "home/ubuntu/server/opineer/comments/views.py", line 103, in comment_expand
comment = Comment.objects.get(pk=comment_id)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 131, in get
return self.get_query_set().get(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 366, in get
% self.model._meta.object_name)
DoesNotExist: Comment matching query does not exist
Ce qui me frustre vraiment, c'est que le projet fonctionne bien dans l'environnement local et en outre, l'objet de requête correspondant existe dans la base de données.
Maintenant, je soupçonne que l'utilisateur accède à la base de données lorsqu'elle est réservée à d'autres utilisateurs, mais il n'y a aucun moyen de prouver mon argument et je n'ai aucune solution.
Quelqu'un a-t-il déjà eu ce genre de problème? Des suggestions sur la façon de résoudre ce problème?
Merci beaucoup pour votre aide à l'avance.
EDIT: J'ai interrogé manuellement la base de données en utilisant les mêmes informations extraites de l'e-mail d'erreur du serveur que j'ai reçu. J'ai pu frapper l'entrée sans aucun problème. En outre, il semble que le même comportement que l'utilisateur a effectué ne soulève pas de problème la plupart du temps, mais plutôt dans certains cas (qui sont encore inconnus). En conclusion, ce n'est certainement pas un problème avec l'entrée manquante dans la base de données.
la source
comment = Comment.objects.get(pk=comment_id)
vérifiez que l'identifiant existe dans la base de donnéesRéponses:
votre ligne soulevant l'erreur est ici:
comment = Comment.objects.get(pk=comment_id)
vous essayez d'accéder à un commentaire inexistant.
from django.shortcuts import get_object_or_404 comment = get_object_or_404(Comment, pk=comment_id)
Au lieu d'avoir une erreur sur votre serveur, votre utilisateur recevra un 404 signifiant qu'il essaie d'accéder à une ressource inexistante.
Ok jusqu'à ici, je suppose que vous en êtes conscient.
Certains utilisateurs (et j'en fais partie) laissent les onglets fonctionner pendant longtemps, si les utilisateurs sont autorisés à supprimer des données, cela peut arriver. Une erreur 404 peut être une meilleure erreur pour gérer une erreur de ressource supprimée que d'envoyer un e-mail à l'administrateur.
Les autres utilisateurs accèdent aux adresses de leur historique (même si des données ont été supprimées car cela peut arriver).
la source
from django.db import connection
,connection.connection.close()
,connection.connection = None
pour essayer de réinitialiser db connexion et démarrer à partir d' un nouveau.Peut-être que vous n'avez pas d'enregistrement de commentaires avec une telle clé primaire, alors vous devriez utiliser ce code:
try: comment = Comment.objects.get(pk=comment_id) except Comment.DoesNotExist: comment = None
la source
def previous_job(self): return self.get_previous_by_start_dt(brand=self.brand, status='finished') or None
Je ne sais pas comment implémenter le try catch iciVous pouvez utiliser ceci:
comment = Comment.objects.filter(pk=comment_id)
la source
Model.objects.filter
retournera un Queryset, alors queModel.objects.get
retournera un objet. Si l'objet n'existe pas, le premier renverra un jeu de requêtes vide, le second entraînera uneModel.DoesNotExist
erreur.Comment.objects.filter(pk=comment_id).first()
reviendraNone
si aucun enregistrement n'est trouvé.Vous pouvez essayer de cette façon. utilisez simplement une fonction pour obtenir votre objet
def get_object(self, id): try: return Comment.objects.get(pk=id) except Comment.DoesNotExist: return False
la source