2009-05-19 11 views
6

मैं एक Django आवेदन के साथ कुछ समस्या थी करने के बाद मैं इसे तैनात किया। मैं एक यूबंटू सर्वर पर अपाचे + मॉड-वेस्गी का उपयोग करता हूं। सर्वर को रीबूट करने के कुछ समय बाद फूबर जाता है, यह लगभग -10 घंटों तक गलत है।datetime.now() Django आवेदन में बुरा हो जाता है

def servertime(): 
    return HttpResponse(datetime.now()) 

और बाद मैं सर्वर रिबूट और यूआरएल उस दृश्य यह पहली बार ठीक लग रहा है पता चलता है कि जाँच: मैं एक Django दृश्य ऐसा दिखता है जैसे बनाया है। फिर एक बिंदु पर यह कभी-कभी सही समय देता है और कभी-कभी नहीं और बाद में यह हमेशा गलत समय देता है। हालांकि सर्वर समय कोरक है।

कोई सुराग? मैंने भाग्य के बिना इसे गुगल किया है।

+0

क्या यह बिल्कुल 10 घंटे है? एक टाइमज़ोन मुद्दा हो सकता है। –

+0

मैंने भी वही बग का प्रयोग किया। ऐसा लगता है कि 'datetime.now()' विधि की गणना सर्वर पर शुरू होने के लिए एक बार की जाती है और उसके बाद स्थिर होती है (तारीख के लिए और घंटे नहीं)। वास्तव में बहुत अजीब और अप्रत्याशित व्यवहार। मैं wsgi_mod को डिमन मोड में स्थापित करने का प्रयास करूंगा क्योंकि यह चिह्नित उत्तर में प्रस्तावित है। और, वास्तव में, मैं एक ही समय में एक PHP ऐप चला रहा था ... – perror

+0

यह Django 1.1 के साथ था, इसलिए शायद Django के नए टाइमज़ोन समर्थन के साथ कोई समस्या नहीं है। – Nixarn

उत्तर

5

मैंने पाया कि डिमन मोड में wsgi डालने का काम करता है। यकीन नहीं क्यों, लेकिन यह किया। ऐसा लगता है कि कुछ नई बनाई गई प्रक्रियाओं को समय खराब हो गया है।

+6

अधिकतर संभावना है क्योंकि आप एक ही समय में अपाचे में कुछ अन्य वेब एप्लिकेशन चला रहे थे, जैसे कि PHP, और वह एप्लिकेशन टाइमज़ोन को एक और मूल्य और Django एप्लिकेशन के साथ खराब कर रहा था। यह समस्या mod_wsgi दस्तावेज़ में http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Timezone_and_Locale_Settings पर प्रलेखित है। –

6

क्या मैं आपका urls.py भी देख सकता हूं?

इसी प्रकार के व्यवहार ने मुझे एक बार पहले स्टम्प्ड ...

क्या यह पता चला होने के लिए जिस तरह से है कि मेरे urls.py दृश्य कहा जाता था। पाइथन ने टाइमटाइम चलाया .now() एक बार और भविष्य में कॉल के लिए संग्रहीत किया, कभी भी इसे फिर से कॉल नहीं किया। यही कारण है कि Django devs, एक मॉडल के डिफ़ॉल्ट मान पर एक समारोह, नहीं एक समारोह कॉल पारित करने की क्षमता को लागू करने की है क्योंकि यह समारोह की पहली कॉल लेने के लिए और है कि जब तक अजगर पुन: प्रारंभ होने का उपयोग होता था।

आपका व्यवहार पहली बार सही लगता है क्योंकि पहली बार दृश्य को बुलाया गया था। यह कई बार गलत था क्योंकि इसे उसी तारीख को फिर से मिला। फिर यह यादृच्छिक रूप से फिर से सही था क्योंकि आपके अपाचे ने शायद इसके लिए एक और कार्यकर्ता प्रक्रिया शुरू की थी, और जब आप इस प्रक्रिया को संभालने के दौरान प्रक्रिया में थे तो पागलपन शायद होता है।

0

तुम इतनी

def servertime(): 
    return HttpResponse(datetime.now(), content_type="text/plain") 

एक और विचार की तरह सामग्री प्रकार निर्दिष्ट करने की आवश्यकता हो सकता है:

यह काम नहीं कर सकते हैं, क्योंकि datetime.now() एक datetime वस्तु देता है। इस प्रयास करें:

def servertime(): 
    return HttpResponse(str(datetime.now()), content_type="text/plain") 
1

हो सकता है कि सर्वर, सर्वर शुरू में datetime.now() मूल्यांकन कर रही है, एक टेम्पलेट के माध्यम से यह आलसी बनाने का प्रयास करें या अपने दृश्य में एक चर का उपयोग करें।

इस blog post पर एक नज़र डालें।

1

Django आपके सेटिंग्स परिवर्तनीय TIME_ZONE के आधार पर सिस्टम समय क्षेत्र सेट करता है। विभिन्न TIME_ZONE सेटिंग्स के साथ कई Django उदाहरण चलाते समय यह सभी प्रकार के भ्रम पैदा कर सकता है।

यह वही है Django करता है:

os.environ['TZ'] = self.TIME_ZONE 

ऊपर जवाब:

"मैंने पाया कि डेमॉन मोड में WSGI डाल काम करता है"

मेरे लिए काम नहीं करता। ..

मुझे लगता है कि मैं अब django के TIME_ZONE में निर्मित नहीं कर रहा हूं।

2

डेटाटाइम .now() का शायद एक बार मूल्यांकन किया जा रहा है, जब आपकी कक्षा तत्काल हो। कोष्ठक को हटाने का प्रयास करें ताकि फ़ंक्शन datetime.now वापस कर दिया गया हो और फिर मूल्यांकन किया गया। मेरे डेटटाइमफ़िल्ड्स के लिए डिफ़ॉल्ट मान सेट करने के साथ मुझे एक ही समस्या थी और मेरा समाधान here लिखा।

0

कोशिश settings.py

वह मेरे लिए काम किया में अपना समय क्षेत्र (TIME_ZONE चर) स्थापित करने के लिए।

संबंधित मुद्दे