2012-05-01 3 views
2

장고 프로젝트 용 웹 기반 코드 편집기를 작성하고 있습니다. 편집기 내에서 장고 runserver 명령을 시작하려면 편집기 자체에 대한 서버와 간섭하지 않아야합니다. 아래는 내가 사용하는 코드입니다. 서버 (포트 9999)가 시작되었지만 서버를 시작한 프로젝트의 코드를 변경하면 두 서버가 모두 중지됩니다. 오류는 "해당 포트가 이미 사용 중입니다."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

편집기가 dev 서버에서보다 안정적/확장 가능하지 않은 이유는 무엇입니까? –

+0

나는 다른 것을 사용하는 것을 모르기 때문에. 나는 지금 당장 개인적인 용도로 단순한 것을 원한다. –

답변

1

시작하는 서버를 관리하는 데 더 많은 작업을 투자해야합니다. runserver(request, project_slug) 번을 여러 번 호출하면 해당 리소스는 이미 해당 포트에 바인딩 된 다른 백그라운드 프로세스에 의해 사용되며 현재 프로세스를 참조하는 PID 파일조차 없습니다.

당신은/시작하는 WSGIServer를 죽이는위한 몇 가지 체조를 추가해야합니다 그리고 당신은 그것을 보장 할 수 없기 때문에 당신은 확실히 수동 포트 선택에서 select a free port for you --defer을 위해 socket 낮은 수준의 네트워킹 라이브러리를 사용해야합니다 시스템의 다른 프로세스가 포트를 차지하지 않아 응용 프로그램이 복구 불가능한 오류 상태가 될 수 있습니다.

다행스럽게도 별도의 스레드에서 장고 서버 인스턴스를 적절하게 관리하는 오픈 소스 Lettuce 프로젝트가 있습니다. 다음은 actual code for the server입니다. 귀하가 직접보고 받아 들일 것을 권장합니다.

관련 문제