2012-05-01 78 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,我鼓勵你爲自己的目的去看和採用。