2014-12-01 8 views
7

यह एक मुद्दा है जो मुझे मेरी सभी साइटों पर सामना करना पड़ा जो Django 1.7 mod_wsgi में चल रहे हैं। इस मुद्दे का केंद्र यह है कि यदि स्थानीय स्तर पर विकास करते समय, मैं कोडबेस में घातक त्रुटि प्रस्तुत करता हूं, और उसके बाद इसे सही करता हूं, कोड निगरानी स्क्रिप्ट सुधार का पता नहीं लगाती है।कोड परिवर्तन परिवर्तन Django 1.7 के साथ malfunctioning mod-wsgi

मैं स्थानीय रूप से विकसित होने पर कोडबेस में परिवर्तनों का पता लगाने के लिए Graham Dumpleton's monitor.py script का उपयोग करता हूं (मैं Django विकास सर्वर की बजाय अपाचे का उपयोग करता हूं)।

यह हमेशा Django < = 1.6 में काम करता था, लेकिन Django 1.7 में मैं निम्नलिखित त्रुटि मिलती है:

File "/home/me/.virtualenvs/myvirtualenv/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application 
    django.setup() 
File "/home/me/virtualenvs/myvirtualenv/lib/python2.7/site-packages/django/__init__.py", line 21, in setup 
    apps.populate(settings.INSTALLED_APPS) 
File "/home/me/.virtualenvs/myvirtualenv/lib/python2.7/site-packages/django/apps/registry.py", line 78, in populate 
    raise RuntimeError("populate() isn't reentrant") 
RuntimeError: populate() isn't reentrant 

परेशान बात यह है कि अगर मैं त्रुटि को दूर, monitor.py पता नहीं लगा पाया है परिवर्तन, इसलिए मुझे या तो अपाचे को पुनरारंभ करना होगा, या किसी अन्य फ़ाइल को स्पर्श करना होगा जो पहले से लोड हो चुका था (जैसे सेटिंग्स फ़ाइल)।

मुझे लगता है कि यह इस तथ्य के कारण है कि "पुनः लोड करने वाला कोड केवल आयातित फ़ाइलों (उर्फ sys.modules) पर नज़र रखता है" (source)। इसलिए क्योंकि गलत फ़ाइल सफलतापूर्वक आयात नहीं की गई थी, इसलिए Monitor.py प्रक्रिया को पुनरारंभ करने के लिए नहीं जानता है।

+0

यह समान है कि पाइथन इंटरएक्टिव दुभाषिया पूरी तरह से पुनः लोड नहीं कर सकता है। स्मृति में कोड की एक प्रति है वैसे भी और कई मामलों में '.pyc/.pyo' फ़ाइलों को हटाने से काम नहीं होता है। हमने सभी फ़ाइलों पर एक वॉचर डालने और परिवर्तन पर अपाचे एंट्री पॉइंट ('wsgi') को पुनः लोड करके इस त्रुटि को ठीक किया है। इसमें थोड़ा सा अंतराल है, और आप इसे उत्पादन के लिए बंद कर सकते हैं। – kunl

+0

uwsgi का उपयोग करके मेरे साथ कुछ ऐसा ही हुआ। मैंने फिर ज़रूरत-ऐप = सच का उपयोग शुरू किया। यह uwsgi ऐप को त्याग देता है क्योंकि यह सही ढंग से लोड नहीं हो रहा है। तो एक बार जब आप नया परिवर्तन विकसित करेंगे तो यह काम करेगा। शायद आप कुछ इसी तरह पा सकते हैं। –

+1

मैंने स्थानीय विकास के लिए डीजेगो विकास सर्वर पर स्विचिंग समाप्त कर दी है। जब तक कि आपके पास वास्तव में कोई अच्छा कारण नहीं है, तो मैं कहूंगा कि स्थानीय Django विकास के लिए अपाचे और mod_wsgi के साथ काम करने से यह एक बेहतर तरीका है। – seddonym

उत्तर

0

मुझे यकीन नहीं है कि आपकी तैनाती प्रक्रिया क्या है और न ही आपके उत्पादन ऑपरेटिंग सिस्टम, लेकिन लिनक्स/उबंटू दुनिया में एक ओएस कमांड है जिसे पिक्कलन कहा जाता है। मेरे Django/पायथन तैनाती स्क्रिप्ट के दौरान (आमतौर पर कपड़े के माध्यम से) मैं आदेश "pyclean" जारी करते हैं। परियोजना रूट में। यह स्क्रिप्ट वर्तमान फ़ोल्डर में शुरू होने वाली सभी .pyc फ़ाइलों को दोबारा हटा देती है। आशा है कि ये आपकी मदद करेगा।

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