2010-04-30 15 views
17

मैं Django के लिए नया हूँ। मुझे लगता है कि मैं एक साधारण गलती कर रहा हूं।पायडेव और डीजेगो: देव सर्वर को पुनरारंभ कैसे करें?

मैं Pydev साथ डेव सर्वर का शुभारंभ किया:

RClick परियोजना पर >> Django >> कस्टम आदेश >> runserver

सर्वर आया, और सब कुछ बढ़िया था। लेकिन अब मैं इसे रोकने की कोशिश कर रहा हूं, और यह पता नहीं लगा सकता कि कैसे। मैंने PyDev कंसोल में प्रक्रिया को रोक दिया, और ग्रहण बंद कर दिया, लेकिन वेब पेजों को अभी भी http://127.0.0.1:8000 से परोसा जा रहा है।

मैं का शुभारंभ किया और कमांड लाइन सामान्य रूप से से सर्वर छोड़ने:

python manage.py runserver 

लेकिन सर्वर अभी भी ऊपर है। मुझसे यहां क्या गलत हो रहा है?

उत्तर

4

मैं आमतौर पर इसे कंसोल से चलाता हूं। PyDev से चलने से अनावश्यक भ्रम जोड़ता है, और जब तक आप PyDev के जीयूआई इंटरैक्टिव डिबगिंग का उपयोग नहीं करते हैं तब तक कोई लाभ नहीं लाता है।

2

समाधान: कुछ प्रोजेक्ट फ़ाइल में एक दुभाषिया त्रुटि बनाएं। इससे सर्वर क्रैश हो जाएगा। सर्वर को सामान्य के रूप में पुनरारंभ किया जा सकता है।

+0

मुझे आश्चर्य है कि क्या आप इसे एक सुरुचिपूर्ण समाधान कह सकते हैं। यह आसान है, और यह काम करता है। – Udi

14

डिफ़ॉल्ट रूप से, रनरवर कमांड ऑटोरेलोड मोड में चलता है, जो एक अलग प्रक्रिया में चलता है। इसका मतलब है कि पीईडीवी को यह नहीं पता कि इसे कैसे रोकें, और कंसोल विंडो में इसका आउटपुट प्रदर्शित नहीं करता है।

यदि आप इसके बजाय runserver --noreload आदेश चलाते हैं, तो ऑटो-रीलोडर अक्षम कर दिया जाएगा। फिर आप कंसोल आउटपुट देख सकते हैं और सामान्य रूप से सर्वर को रोक सकते हैं। हालांकि, इसका मतलब यह है कि जब तक आप मैन्युअल रूप से सर्वर को पुनरारंभ नहीं करते हैं तब तक आपके पायथन फ़ाइलों में परिवर्तन प्रभावी नहीं होंगे।

3

संपादित करें: नवीनतम PyDev संस्करणों (PyDev 3.4.1 के बाद से) अब किसी भी वैकल्पिक हल की जरूरत है:

अर्थात्: PyDev ठीक से एक को मार प्रक्रिया संचालन पर subprocesses मार डालेगा और जब नियमित पर पुन: लोड के साथ भी डीबगिंग, PyDev जोड़ देती है बाल प्रक्रियाओं के लिए डीबगर।

दुर्भाग्य से, कि, उम्मीद के रूप में PyDev बस मूल प्रक्रिया मार डालेगा (यानी: के रूप में Ctrl + C के बजाय अगर तुम्हें मार


पुराना जवाब (3.4.1 से अधिक उम्र के PyDev संस्करणों के लिए) कार्य प्रबंधक में मूल प्रक्रिया)।

समाधान डीजेंगो को स्वयं संपादित करेगा ताकि बच्चे प्रक्रिया को माता-पिता को यह जान सकें कि यह अभी भी जीवित है और बाहर निकलने पर बाहर निकलता है ... देखें: How to make child process die after parent exits? संदर्भ के लिए।

एक त्वरित रूप से यह django/utils/autoreload से संबंधित प्रतीत होता है।पीई और जिस तरह से यह चीजों को शुरू करता है - इसलिए, यह एक थ्रेड शुरू करने की आवश्यकता होगी जो माता-पिता जीवित है या नहीं, और अगर यह बच्चे की प्रक्रिया को मारता नहीं है - मैंने बताया है कि Django में एक बग के रूप में खुद: https://code.djangoproject.com/ticket/16982

नोट: के रूप में PyDev के लिए एक समाधान है, तो आप Django एक नया कंसोल का आवंटन (PyDev में से) कर सकते हैं ताकि, जब तक एक उचित समाधान Django से उपलब्ध है, नीचे दिए गए पैच हो सकता है, जबकि अभी भी PyDev (से चल रहा Django autoreload को एक नया कंसोल आवंटित करने के लिए उपयोग किया जाता है - जहां आप Ctrl + C का सही उपयोग कर सकते हैं)।

Index: django/utils/autoreload.py 
=================================================================== 
--- django/utils/autoreload.py (revision 16923) 
+++ django/utils/autoreload.py (working copy) 
@@ -98,11 +98,14 @@ 
def restart_with_reloader(): 
    while True: 
     args = [sys.executable] + ['-W%s' % o for o in sys.warnoptions] + sys.argv 
-  if sys.platform == "win32": 
-   args = ['"%s"' % arg for arg in args] 
     new_environ = os.environ.copy() 
     new_environ["RUN_MAIN"] = 'true' 
-  exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ) 
+ 
+  import subprocess 
+  popen = subprocess.Popen(args, env=new_environ, creationflags=subprocess.CREATE_NEW_CONSOLE) 
+  exit_code = popen.wait() 
     if exit_code != 3: 
      return exit_code 
1

आप सीएमडी का उपयोग कर Windows पर संचालित करते हैं: साथ CTRL + BREAK सर्वर से बाहर निकलें।

python manage.py runserver localhost:8000 
5

भागो परियोजना 1. राइट परियोजना (नहीं सबफ़ोल्डर) 2. चलाएँ के रूप में> Pydev पर क्लिक करें: Django

बर्खास्त कंसोल विंडो में समाप्त 1. क्लिक करें

सर्वर डाउन

है
+0

यह काम करता है, हालांकि "टर्मिनेट" दाईं ओर लाल बॉक्स है, और फिर आपको किसी भी बदलाव को देखने के लिए सर्वर को पुनरारंभ करना होगा। –

+0

ग्रेट सॉल्यूशन, और यदि यह काम नहीं करता है तो कंप्यूटर/ग्रहण को पुनरारंभ करने का प्रयास करें और यह सुनिश्चित कर लें कि आप केवल सर्वर को इस सटीक तरीके से शुरू करें। "रनरवर" कस्टम कमांड के साथ इसे मिक्स करने से सर्वर को ठीक से रोका जा सकता है। – ecoe

0

आप Ctrl + Pause कुंजी पर क्लिक करके छोड़ सकते हैं। ध्यान दें कि रोक कुंजी को Break कहा जा सकता है और कुछ लैपटॉप में यह Fn + F12 संयोजन का उपयोग करके किया जाता है। उम्मीद है कि यह मदद कर सकता है।

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