জ্যাঙ্গো ত্রুটি - মিলের ক্যোয়ারী বিদ্যমান নেই


92

অবশেষে আমি আমার প্রকল্পটি উত্পাদন পর্যায়ে প্রকাশ করেছি এবং হঠাৎ আমার কিছু সমস্যা রয়েছে যা আমাকে কখনও উন্নয়ন পর্যায়ে মোকাবেলা করতে হয়নি।

যখন ব্যবহারকারীরা কিছু ক্রিয়া পোস্ট করে, আমি মাঝে মাঝে নিম্নলিখিত ত্রুটিটি পাই।

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
স্পষ্টতই, এটি একটি ডেটা ইস্যু: comment = Comment.objects.get(pk=comment_id)ডাটাবেসে আইডি উপস্থিত রয়েছে তা যাচাই করুন
কার্ত্তিকর

4
"পাইথন ম্যানেজ.পি স্কেলল" আপনার মডেলগুলির সাথে সম্পর্কিত এসকিউএল উত্পন্ন করবে। এটি ডিবি স্কিমা এসকিউএল এর সাথে মিলেছে কিনা তা পরীক্ষা করে দেখুন। উদাহরণস্বরূপ পোস্টগ্র্রেএসকিউএল এর সাথে যদি কাজ করা হয় তবে এটি ক্রমের একটি সমস্যাও হতে পারে। উপসংহারে: আপনি কি আপনার পরিবেশ সম্পর্কে আরও তথ্য আনতে পারেন (এসকিউডিবি, ডিবি, ডিবিতে সংশ্লিষ্ট সারণী এবং মডেল.পি-তে কোড, ...)?
রিকোলা

@ রিকোলা 3 ডি হ্যালো রিকোলা, আমি বর্তমানে মাই এসকিএল ডিবি ব্যবহার করছি এটি আমাজন ইসি 2 উদাহরণ থেকে হোস্টিং করছি। এবং আপাতত বিল্ট ইন জ্যাঙ্গো কমেন্টটি ব্যবহার করছি। ইতিমধ্যে, আমি আপনার প্রস্তাবিত স্ক্যালাল কমান্ডটি চালানোর চেষ্টা করব। ধন্যবাদ.
ক্রিস পি

উত্তর:


97

ত্রুটি উত্থাপন আপনার লাইন এখানে:

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 ত্রুটি অ্যাডমিনকে ইমেল প্রেরণের চেয়ে মুছে ফেলা সম্পদ ত্রুটিটি পরিচালনা করা ভাল ত্রুটি হতে পারে।

অন্যান্য ব্যবহারকারীরা তাদের ইতিহাস থেকে ঠিকানাগুলিতে যান, (ডেটা যদি মুছে ফেলা হয় তাই এটি মুছে ফেলা হয়েছে)


4
দীর্ঘ চলমান ট্যাবগুলিতে +1। পুরানো ট্যাবগুলির মাধ্যমে 404 আমার সাথে অনেক কিছু ঘটে।
ইউজি 'টোমিতা' টোমিতা

আপনার পরামর্শের জন্য আপনাকে ক্রিস ধন্যবাদ। আমাকে সত্যিই বিরক্ত করার বিষয়টি হ'ল আমি যখন মাইএসকিএল ডাটাবেসটিকে ম্যানুয়ালি জিজ্ঞাসা করি (সার্ভার থেকে প্রাপ্ত ত্রুটির তথ্যটি ব্যবহার করে) আমি কোনও সমস্যা ছাড়াই সঠিক এন্ট্রিটিকে আঘাত করি। এছাড়াও, একই ক্রিয়াটি কখনও কখনও doNotExist ব্যতিক্রম ছোঁড়ে তবে অন্যান্য সময়ে বেশিরভাগ ক্ষেত্রে কাজ করে। এটি ডাটাবেসে অনুপস্থিত এন্ট্রি সহ সমস্যাটি বলে মনে হচ্ছে না :(
ক্রিস পি

আমার ব্যবহারকারী কম থাকতে পারে তবে পোস্টগ্রাগিসহ আমার কখনই এ জাতীয় সমস্যা হয়নি। আমাদের কাছে সত্যিই অনেক তথ্য নেই, আপনার ডাটাবেসে গোলাম / মাস্টার ক্লাস্টারিং নেই? আপনি ক্যোয়ারসেটে ক্যাশে ব্যবহার করবেন না?
খ্রিস্টোফের

@ christophe31 সুতরাং আমি এখনও সত্যিই কোনও ধরণের ডিবি পারফরম্যান্স অপটিমাইজেশন প্রয়োগ করি নি বা স্লেভ / মাস্টার ক্লাস্টারিং বা ক্যোয়ারসেটগুলিতে ক্যাশে করার মতো পদ্ধতিগুলি ব্যাক আপ করি নি। আমার ধারণা আমি এই বৈশিষ্ট্যগুলি বাস্তবায়ন করব এবং দেখব সমস্যাটি এখনও থেকে যায় কিনা।
ক্রিস পি

4
এছাড়াও আপনি ধরা মধ্যে এই অ্যাড করতে পারেন: from django.db import connection, connection.connection.close(), connection.connection = Noneডিবি সংযোগ পুনরায় সেট এবং একটি নতুন থেকে শুরু করতে চেষ্টা করুন।
খ্রিস্টোফি 31

106

এ জাতীয় প্রাথমিক কী সহ আপনার কোনও মন্তব্য রেকর্ড নেই, তবে আপনার এই কোডটি ব্যবহার করা উচিত:

try:
    comment = Comment.objects.get(pk=comment_id)
except Comment.DoesNotExist:
    comment = None

4
এই ক্ষেত্রে সেরা বিকল্প। ব্যবহারকারীর দিকে 404 নিক্ষেপ করার পরিবর্তে ত্রুটিটি ধরুন এবং একটি সুন্দর পূর্বনির্ধারিত বার্তা প্রদর্শন করুন। হার্ট জ্বলে না।
ব্যবহারকারী 12379095

এটি এখানে কিভাবে কাজ করবে? def previous_job(self): return self.get_previous_by_start_dt(brand=self.brand, status='finished') or Noneকীভাবে
চেষ্টাটি

23

আপনি এটি ব্যবহার করতে পারেন:

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

ঠিক আছে, যদি আপনি নির্দিষ্ট কোনও বস্তু চান তবে আপনি ফিল্টারটি ব্যবহার করতে পারবেন না কারণ এটি খালি তালিকায় ফিরে আসতে পারে যদি কোয়েরির সাথে মেলে না। এবং যখন এটি মেলে তখন আপনাকে তালিকা থেকে প্রথম অবজেক্টটি ব্যবহার করতে হবে।
জয় মোদি

4
সম্ভবত এটি সেই বিন্দু: ফিল্টারটি ব্যবহার করুন এবং পরীক্ষা ব্যতিক্রমের পরিবর্তে শূন্য বা একটি এন্ট্রি রয়েছে কিনা তা পরীক্ষা করুন?
মাইক 'পোম্যাক্স' কামারম্যানস

লক্ষণীয় যে Model.objects.filterকোয়েরিসেট ফিরিয়ে দেবে, যেখানে Model.objects.getকোনও বস্তু ফিরে আসবে। যদি অবজেক্টটি বিদ্যমান না থাকে তবে প্রাক্তনটি একটি খালি ক্যোরিসেটটি ফিরিয়ে দেবে, পরেরটি একটি Model.DoesNotExistত্রুটির ফলে ঘটবে ।
ron_g

Comment.objects.filter(pk=comment_id).first()Noneকোনও রেকর্ড না পাওয়া গেলে ফিরে আসবে ।
স্টিজেবার্গার

13

আপনি এইভাবে চেষ্টা করতে পারেন। আপনার বস্তু পেতে কেবল একটি ফাংশন ব্যবহার করুন

def get_object(self, id):
    try:
        return Comment.objects.get(pk=id)
    except Comment.DoesNotExist:
        return False
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.