3

Django プロジェクト用の Web ベースのコード エディターを作成しています。エディター内から、エディター自体のサーバーに干渉することなく、Django runserver コマンドを開始したいと考えています。以下は私が使用するコードです。サーバー (ポート 9999) は開始されていますが、サーバーを開始したばかりのプロジェクトのコードを変更すると、両方のサーバーが停止します。エラーは「そのポートは既に使用されています」

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'])   
4

1 に答える 1

1

開始するサーバーの管理には、さらに多くの作業を投資する必要があります。複数回呼び出すとrunserver(request, project_slug)、そのリソースは、そのポートにバインドされている別のバックグラウンド プロセスによって既に占有されており、現在、プロセスを参照するための PID ファイルさえありません。

WSGIServerを起動/停止するための体操を追加する必要があります。また、socket低レベルのネットワーク ライブラリを使用して空きポートを選択させる必要があります。手動でポートを選択することは保証できないため、延期してくださいシステム上の別のプロセスがポートを占有せず、アプリケーションが回復不能なエラー状態になることはありません。

幸いなことに、別のスレッドのバックグラウンドで Django サーバー インスタンスを適切に管理するオープン ソースのLettuceプロジェクトがあります。これが serverの実際のコードです。これを見て、自分の目的に合わせて採用することをお勧めします。

于 2012-05-01T10:44:52.963 に答える