Saya akhirnya merilis proyek saya ke tingkat produksi dan tiba-tiba saya memiliki beberapa masalah yang tidak pernah saya tangani dalam tahap pengembangan.
Ketika pengguna memposting beberapa tindakan, terkadang saya mendapatkan kesalahan berikut.
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
Yang benar-benar membuat saya frustrasi adalah bahwa proyek tersebut berfungsi dengan baik di lingkungan lokal dan lebih jauh lagi, objek kueri yang cocok TIDAK ada di Database.
Sekarang saya mencurigai bahwa pengguna mengakses Database ketika itu dicadangkan untuk pengguna lain, tetapi tidak ada cara untuk membuktikan argumen saya atau saya memiliki solusi untuk itu.
Apakah ada yang pernah mengalami masalah seperti ini sebelumnya? Ada saran tentang cara mengatasi masalah ini?
Terima kasih banyak atas bantuan Anda sebelumnya.
EDIT: Saya telah menanyakan database secara manual menggunakan informasi yang sama yang diambil dari email kesalahan server yang saya terima. Saya bisa masuk tanpa masalah apa pun. Selain itu, tampaknya perilaku yang sama persis dengan yang dilakukan pengguna tidak menimbulkan masalah apa pun di sebagian besar waktu, melainkan dalam beberapa kasus (yang belum diketahui). Kesimpulannya, ini pasti bukan masalah dengan entri yang hilang dalam database.
sumber
comment = Comment.objects.get(pk=comment_id)
verifikasi id ada di databaseJawaban:
baris Anda meningkatkan kesalahan ada di sini:
comment = Comment.objects.get(pk=comment_id)
Anda mencoba mengakses komentar yang tidak ada.
from django.shortcuts import get_object_or_404 comment = get_object_or_404(Comment, pk=comment_id)
Alih-alih mengalami kesalahan pada server Anda, pengguna Anda akan mendapatkan 404 yang berarti dia mencoba mengakses sumber daya yang tidak ada.
Ok sampai di sini saya rasa Anda sudah mengetahui hal ini.
Beberapa pengguna (dan saya bagian dari mereka) membiarkan tab berjalan untuk waktu yang lama, jika pengguna diizinkan untuk menghapus data, hal itu mungkin terjadi. Kesalahan 404 mungkin merupakan kesalahan yang lebih baik untuk menangani kesalahan sumber daya yang dihapus daripada mengirim email ke admin.
Pengguna lain pergi ke alamat dari sejarah mereka, (sama jika data telah dihapus sejak itu mungkin terjadi).
sumber
from django.db import connection
,connection.connection.close()
,connection.connection = None
untuk mencoba untuk me-reset koneksi db dan mulai dari yang baru.Mungkin Anda tidak memiliki catatan Komentar dengan kunci utama seperti itu, maka Anda harus menggunakan kode ini:
try: comment = Comment.objects.get(pk=comment_id) except Comment.DoesNotExist: comment = None
sumber
def previous_job(self): return self.get_previous_by_start_dt(brand=self.brand, status='finished') or None
tidak tahu bagaimana menerapkan coba tangkap di siniAnda dapat menggunakan ini:
comment = Comment.objects.filter(pk=comment_id)
sumber
Model.objects.filter
akan mengembalikan Queryset, sedangkanModel.objects.get
akan mengembalikan objek. Jika objek tidak ada, yang pertama akan mengembalikan queryset kosong, yang terakhir akan menghasilkanModel.DoesNotExist
kesalahan.Comment.objects.filter(pk=comment_id).first()
akan kembaliNone
jika tidak ada catatan yang ditemukan.Anda dapat mencoba cara ini. cukup gunakan fungsi untuk mendapatkan objek Anda
def get_object(self, id): try: return Comment.objects.get(pk=id) except Comment.DoesNotExist: return False
sumber