2010-04-30 99 views
17

我是Django的新手。我想我犯了一個簡單的錯誤。PyDev和Django:如何重新啓動dev服務器?

我發起了Pydev的開發服務器:runserver命令

服務器上來

R單擊項目>> >> Django的自定義 命令>>,一切是偉大的。但是現在我試圖阻止它,並且不知道如何。我在PyDev控制檯中停止了這個過程,並關閉了Eclipse,但仍然從http://127.0.0.1:8000提供網頁。

我發起,並通過命令行正常退出服務器:

python manage.py runserver 

但服務器仍有上漲。我在這裏做錯了什麼?

回答

4

我通常從控制檯運行它。從PyDev運行增加了不必要的混淆,並且在您碰巧使用PyDev的GUI交互式調試之前不會帶來任何好處。

2

解決方案:在某些項目文件中創建解釋器錯誤。這將導致服務器崩潰。服務器可以正常重啓。

+0

我不知道你是否可以稱之爲優雅的解決方案。這很簡單,而且很有效。 – Udi 2013-11-11 14:07:32

14

默認情況下,runserver命令以autoreload模式運行,該模式在單獨的進程中運行。這意味着PyDev不知道如何停止它,並且不會在控制檯窗口中顯示它的輸出。

如果您改爲運行命令runserver --noreload,則自動重新加載器將被禁用。然後您可以看到控制檯輸出並正常停止服務器。但是,這意味着只有手動重新啓動服務器時,對Python文件的更改纔會生效。

3

編輯:最新版本的PyDev(因爲PyDev的3.4.1)不再需要任何解決方法:

即:PyDev的將正確殺一殺工藝操作子流程和定期重裝甚至上調試時,會的PyDev重視調試器到子進程。


老答案(對於PyDev的版本早於3.4.1):

不幸的是,這是意料之中的,因爲PyDev的只會殺死父進程(即:好像不是CTRL + C,你殺任務管理器中的父進程)。

該解決方案將編輯Django本身,以便子進程輪詢父進程以知道它仍然活着,如果不是,則退出...請參閱:How to make child process die after parent exits?以供參考。

快速查看後,它似乎與django/utils/autoreload有關。py和它啓動事物的方式 - 因此,需要啓動一個線程,以便看到父代是否還活着,如果它不是它會終止子進程 - 我已經報告說,作爲Django中的一個錯誤本身:https://code.djangoproject.com/ticket/16982

注:爲PyDev的一種變通方法,可以使的Django分配一個新的控制檯(出的PyDev的),同時還從PyDev的(運行,所以,直到一個合適的解決方案可從Django的,下面的補丁可以用於使Django自動重新分配一個新的控制檯 - 在那裏你可以正確使用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

如果您使用CMD在Windows上運行:退出服務器CTRL + BREAK

python manage.py runserver localhost:8000 
5

運行該項目1.右鍵單擊該項目(不子文件夾)2.運行方式> Pydev的:Django的

終止在控制檯窗口中單擊終止

服務器關閉

+0

這可行,儘管「終止」是右邊的紅色框,然後您必須重新啓動服務器才能看到任何更改。 – 2013-04-14 19:10:44

+0

偉大的解決方案,如果它不工作,然後嘗試重新啓動計算機/日食,並確保您只能以確切的方式啓動服務器。將它與「runserver」自定義命令混合可以防止服務器正常停止。 – ecoe 2014-03-06 01:33:58

0

您可以通過點擊Ctrl + Pause鍵退出。請注意,暫停鍵可能被稱爲Break,並且在某些使用組合Fn + F12組合的便攜式計算機中。希望這可能有所幫助。