2012-05-01 79 views
2

我正在为Django项目编写基于Web的代码编辑器。在编辑器中,我想启动Django runserver命令,而不会干扰编辑器本身的服务器。以下是我使用的代码。服务器(端口9999)已启动,但当我更改了刚刚启动两台服务器的服务器的项目代码时,它们停止运行。错误是“那个端口已在使用”从Django项目启动多个Django开发服务器

def runserver(request, project_slug): 
    project = Project.objects.get(slug=project_slug) 
    import os 
    os.system('cd %s; pwd; env; DJANGO_SETTINGS_MODULE=%s.settings; rm nohup.out; nohup python manage.py runserver 0.0.0.0:9999 &' % (project.get_current_directory(), project.slug)) 
    return HttpResponseRedirect(request.META['HTTP_REFERER']) 
+0

为什么编辑器在开发服务器上运行,而不是更稳定/可扩展的东西? –

+0

因为我不知道用什么别的。我现在只想要一些简单的个人用品。 –

回答

1

你需要投入更多的工作进入管理启动服务器。如果您不止一次调用runserver(request, project_slug),那么该资源已经被绑定到该端口的另一个后台进程占用,现在您甚至没有用于引用该进程的PID文件。

你需要添加一些体操启动/杀死WSGIServer,你一定会需要使用socket低级别的网络图书馆有它select a free port for you --defer从手动选择一个端口,因为你不能保证系统上的其他进程将不会占用端口并导致应用程序进入不可恢复的错误状态。

幸运的是,您有开源的Lettuce项目,该项目可以在单独的线程后台正确管理Django服务器实例。这里是actual code for the server,我鼓励你为自己的目的去看和采用。