2012-05-01 18 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

エディタは、安定性とスケーラビリティではなく、devサーバで動作しているのはなぜですか? –

+0

私は他のものを使用することを知らないので。私はちょうど今のところ個人的な使い方が簡単なものを求めています。 –

答えて

1

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

あなたが開始/ WSGIServerを殺すためにいくつかの体操を追加する必要がありますし、あなたがそれを保証することはできませんので、あなたは間違いなく、手動でポートを選択するから、それselect a free port for you --deferを持っているsocket低レベルのネットワークライブラリを使用する必要がありますシステム上の別のプロセスはポートを占有せず、アプリケーションを回復不能なエラー状態に陥らせます。

幸いにも、別のスレッドでバックグラウンドでDjangoサーバーインスタンスを適切に管理するオープンソースのLettuceプロジェクトがあります。ここにはactual code for the serverがあります。私はあなた自身の目的のために見て、採用することをお勧めします。

関連する問題