Finalmente lancé mi proyecto al nivel de producción y de repente tengo algunos problemas con los que nunca tuve que lidiar en la fase de desarrollo.
Cuando los usuarios publican algunas acciones, a veces aparece el siguiente error.
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
Lo que realmente me frustra es que el proyecto funciona bien en el entorno local y, además, el objeto de consulta coincidente SI existe en la base de datos.
Ahora sospecho que el usuario está accediendo a la base de datos cuando está reservada para otros usuarios, pero no hay forma de probar mi argumento ni tengo ninguna solución.
¿Alguien ha tenido este tipo de problema antes? ¿Alguna sugerencia sobre cómo resolver este problema?
Muchas gracias por adelantado por su ayuda.
EDITAR: He consultado manualmente la base de datos utilizando la misma información recuperada del correo electrónico de error del servidor que recibí. Pude acceder a la entrada sin ningún problema. Además, parece que exactamente el mismo comportamiento que realizó el usuario no plantea ningún problema la mayor parte del tiempo, sino en algunos casos (que aún se desconocen). En conclusión, definitivamente no es un problema con la entrada que falta en la base de datos.
fuente
comment = Comment.objects.get(pk=comment_id)
verifique que la identificación exista en la base de datosRespuestas:
su línea que genera el error está aquí:
comment = Comment.objects.get(pk=comment_id)
intenta acceder a un comentario que no existe.
from django.shortcuts import get_object_or_404 comment = get_object_or_404(Comment, pk=comment_id)
En lugar de tener un error en su servidor, su usuario obtendrá un 404, lo que significa que intenta acceder a un recurso que no existe.
Ok hasta aquí, supongo que estás al tanto de esto.
Algunos usuarios (y yo soy parte de ellos) dejan que las pestañas se ejecuten durante mucho tiempo, si los usuarios están autorizados a eliminar datos, puede suceder. Un error 404 puede ser un error mejor para manejar un error de recurso eliminado que enviar un correo electrónico al administrador.
Otros usuarios van a direcciones de su historial (lo mismo si se han eliminado datos, ya que puede suceder).
fuente
from django.db import connection
,connection.connection.close()
,connection.connection = None
para tratar de restablecer la conexión db y empezar de una nueva.Tal vez no tenga un registro de Comentarios con dicha clave primaria, entonces debería usar este código:
try: comment = Comment.objects.get(pk=comment_id) except Comment.DoesNotExist: comment = None
fuente
def previous_job(self): return self.get_previous_by_start_dt(brand=self.brand, status='finished') or None
no sé cómo implementar la captura de prueba aquíPuedes usar esto:
comment = Comment.objects.filter(pk=comment_id)
fuente
Model.objects.filter
devolverá un Queryset, mientrasModel.objects.get
que devolverá un objeto. Si el objeto no existe, el primero devolverá un conjunto de consultas vacío, el segundo dará como resultado unModel.DoesNotExist
error.Comment.objects.filter(pk=comment_id).first()
volveráNone
si no se encuentran registros.Puede intentarlo de esta manera. solo usa una función para obtener tu objeto
def get_object(self, id): try: return Comment.objects.get(pk=id) except Comment.DoesNotExist: return False
fuente