django

2009-07-05 7 views
6

में डेटाबेस कनेक्शन के लिए टाइमआउट कैसे सेट करें मेरे पास dsango के लिए इंजन के रूप में mysql डेटाबेस है। Django काम करता है nginx fastcgi के माध्यम से 1 मिनट में टाइमआउट के साथ (उस nginx के बाद "504 गेटवे टाइम-आउट" कहते हैं)।django

यदि डेटाबेस डाउन हो गया है, तो डीजेंगो डीबी से पुनः कनेक्ट करने की कोशिश कर रहा है और इससे प्रतिक्रिया की प्रतीक्षा कर रहा है। और प्रतिक्रिया के लिए बहुत लंबा इंतजार (1 मिनट से अधिक) कि nginx क्लाइंट को 504 त्रुटि कोड देता है।

django में डीबी कनेक्टन के लिए टाइमआउट कैसे सेट करें? और इस घटना को संभालने का सही तरीका क्या है और क्लाइंट पर वापस लौटें "क्षमा करें डेटाबेस अब सेवा से बाहर है। तकनीकी 504 त्रुटि पृष्ठ के बजाय कृपया बाद में प्रयास करें"?

उत्तर

5

settings.py में DATABASE_OPTIONS अतिरिक्त कीवर्ड आर्ग कि जो कुछ भी डेटाबेस मॉड्यूल उपयोग में है की connect विधि करने के लिए पारित कर रहे हैं की एक dict है; MySqlDBconnect पर connect_timeout मान पर connect_timeout मान, जैसा कि दूसरे उत्तर कहता है, वास्तव में आप वहां क्या चाहते हैं (यह पहले गलत था, और यह बैकएंड द्वारा भिन्न होता है - उदाहरण के लिए, यदि आपका बैकएंड SQLite है तो यह वर्तनी timeout है) ।

कस्टम त्रुटि पृष्ठों के लिए, आप अपने खुद के अपवाद मिडलवेयर लिखने के बारे में Django docs में सलाह का पालन कर सकते हैं (मुझे यकीन है कि सरल अपवाद मिडलवेयर कि सिर्फ एक स्वनिर्धारित पेज से पता चलता योगदान सॉफ्टवेयर में पाया जा सकता है, लेकिन यह करने के लिए तेजी से हो सकता है मौजूदा कोड के लिए वेब खोजने के लिए अपना खुद का रोल करें, और आपको शायद उस कोड को ट्विक करना होगा ;-)।

+0

इस एक सामान्य सेटिंग है कि सभी Django समर्थित डेटाबेस बैकेंड के साथ काम है? (मैंने गुगल किया और केवल एसक्यूएलकेमी के संबंध में इसका उल्लेख किया) – lemonad

+0

नहीं, यह मेरा बुरा नहीं था - अब ध्यान दें कि सभी डीबी के साथ काम करने का कोई भी तरीका नहीं है, लेकिन कनेक्ट_टाउटआउट MySQL के साथ काम करता है, टाइमआउट के साथ काम करता है SQLite, आदि (हमेशा सेटिंग.py में DATABASE_OPTIONS में कुंजी के रूप में)। –

11

आप अपने DATABASES सेटिंग के OPTIONS शब्दकोश का उपयोग कर सकते हैं।

विकल्प नाम अपने डीबी बैकएंड पर निर्भर करता है, लेकिन PostgreSQL के लिए यह connect_timeout होगा:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql', 
     … 
     OPTIONS = { 
      'connect_timeout': 5, 
     } 
    } 
} 
+4

'DATABASE_OPTIONS' Django 1.2 के बाद से' OPTIONS' के लिए बदला जा रहा है (https://docs.djangoproject.com/en/1.9/releases/1.2/) – SangminKim

+0

'connect_timeout' भी पुराना लगता है, कम से कम Django1.9 के लिए । बस 'टाइमआउट' स्वीकार किया जाता है, मुझे उम्मीद है कि यह सही प्रतिस्थापन है। – zeycus

+0

@zeycus 'connect_timeout' पोस्टग्रेज़ के लिए सही विकल्प है। psycopg2 2.7.3.2 त्रुटियों का उपयोग होने पर "अमान्य कनेक्शन विकल्प" के साथ त्रुटियां। Django दस्तावेज़ केवल स्क्लाइट उपयोगकर्ताओं के लिए 'टाइमआउट' का उल्लेख करते हैं। – cdignam