Finalmente lancei meu projeto para o nível de produção e de repente tenho alguns problemas que nunca tive que lidar na fase de desenvolvimento.
Quando os usuários postam algumas ações, às vezes recebo o seguinte erro.
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
O que realmente me frustra é que o projeto funciona bem no ambiente local e, além disso, o objeto de consulta correspondente EXISTE no Banco de Dados.
Agora estou suspeitando que o usuário está acessando o Banco de Dados quando ele está reservado para outros usuários, mas não tenho como provar meu argumento nem tenho solução para ele.
Alguém já teve esse tipo de problema antes? Alguma sugestão sobre como resolver este problema?
Muito obrigado pela sua ajuda com antecedência.
EDIT: Eu consultei manualmente o banco de dados usando as mesmas informações recuperadas do e-mail de erro do servidor que recebi. Consegui acertar a entrada sem nenhum problema. Além disso, parece que o mesmo comportamento que o usuário realizou não levanta nenhum problema na maioria das vezes, mas em alguns casos (ainda desconhecidos). Em conclusão, definitivamente não é um problema com a entrada ausente no banco de dados.
fonte
comment = Comment.objects.get(pk=comment_id)
verifique se a id existe no banco de dadosRespostas:
sua linha levantando o erro está aqui:
comment = Comment.objects.get(pk=comment_id)
você tenta acessar um comentário não existente.
from django.shortcuts import get_object_or_404 comment = get_object_or_404(Comment, pk=comment_id)
Em vez de ocorrer um erro no servidor, o usuário receberá um erro 404, o que significa que ele tenta acessar um recurso inexistente.
Ok, até aqui suponho que você esteja ciente disso.
Alguns usuários (e eu faço parte deles) deixam as abas rodarem por muito tempo, se os usuários estiverem autorizados a deletar dados, isso pode acontecer. Um erro 404 pode ser um erro melhor para lidar com um erro de recurso excluído do que enviar um e-mail para o administrador.
Outros usuários vão para endereços de seu histórico, (mesmo se os dados foram excluídos porque isso pode acontecer).
fonte
from django.db import connection
,connection.connection.close()
,connection.connection = None
para tentar repor db conexão e iniciar a partir de um novo.Talvez você não tenha nenhum registro de comentários com essa chave primária, então você deve usar este código:
try: comment = Comment.objects.get(pk=comment_id) except Comment.DoesNotExist: comment = None
fonte
def previous_job(self): return self.get_previous_by_start_dt(brand=self.brand, status='finished') or None
não sei como implementar o try catch aquiVocê pode usar isto:
comment = Comment.objects.filter(pk=comment_id)
fonte
Model.objects.filter
retornará um Queryset, enquantoModel.objects.get
que retornará um objeto. Se o objeto não existir, o primeiro retornará um queryset vazio, o último resultará em umModel.DoesNotExist
erro.Comment.objects.filter(pk=comment_id).first()
retornaráNone
se nenhum registro for encontrado.Você pode tentar desta forma. apenas use uma função para obter seu objeto
def get_object(self, id): try: return Comment.objects.get(pk=id) except Comment.DoesNotExist: return False
fonte