133

最終的にプロジェクトを本番レベルにリリースしたところ、突然、開発段階で対処する必要のなかったいくつかの問題が発生しました。

ユーザーがいくつかのアクションを投稿すると、次のエラーが発生することがあります。

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

本当にイライラするのは、プロジェクトがローカル環境で正常に動作し、さらに、一致するクエリ オブジェクトがデータベースに存在することです。

現在、ユーザーが他のユーザーに予約されているときにデータベースにアクセスしているのではないかと疑っていますが、私の主張を証明する方法はなく、解決策もありません。

誰かが以前にこの種の問題を抱えていましたか? この問題を解決する方法について何か提案はありますか?

よろしくお願いいたします。

編集: 受信したサーバー エラー メールから取得した同じ情報を使用して、手動でデータベースにクエリを実行しました。問題なくエントリーできました。さらに、ユーザーが実行したのとまったく同じ動作がほとんどの場合問題を引き起こさないように見えますが、(まだ不明な) 場合もあります。結論として、データベースにエントリがないことは問題ではありません。

4

4 に答える 4

130

エラーを発生させる行は次のとおりです。

comment = Comment.objects.get(pk=comment_id)

存在しないコメントにアクセスしようとしました。

from django.shortcuts import get_object_or_404

comment = get_object_or_404(Comment, pk=comment_id)

サーバーでエラーが発生する代わりに、ユーザーは存在しないリソースにアクセスしようとしたことを意味する 404 を受け取ります。

ここまでは、お気づきかと思います。

一部のユーザー (および私もその一部) は、タブを長時間実行させています。ユーザーがデータの削除を許可されている場合、それが発生する可能性があります。削除されたリソース エラーを処理するには、管理者にメールを送信するよりも 404 エラーの方が適している場合があります。

他のユーザーは、履歴からアドレスに移動します (データが削除された場合も同様です)。

于 2013-07-23T16:24:43.610 に答える
32

これを使用できます:

comment = Comment.objects.filter(pk=comment_id)
于 2014-02-04T10:51:44.003 に答える