2010-04-30 103 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组合的便携式计算机中。希望这可能有所帮助。