Djangoアプリケーションをgunicornで実行するには3つの方法があります。
標準gunicorn
+ wsgi
( ref Django doc )
gunicorn project.wsgi:application
Gunicorn Django統合を使用(ref gunicorn doc および Django doc )を使用):
python manage.py run_gunicorn
gunicorn_Django
コマンドの使用(ref gunicorn doc )
gunicorn_Django [OPTIONS] [SETTINGS_PATH]
Djangoのドキュメントでは、Gunicornのドキュメントにオプションとしてリストされていない1.の使用を推奨しています。
Djangoアプリをgunicornで実行するための最良の方法に関するベストプラクティスはありますか?これらのさまざまなソリューションの予測可能な長所/短所は何ですか?
gunicornのコード を垣間見ると、ほとんど同じように見えます。2。Djangoの内部を使用してwsgiアプリを作成しているようで、3。を使用しています。
そうだとすれば、「1」を使わない理由が何なのかわからない。常に、特にwsgi.py
ファイルがDjango 1.4以降で自動作成されるため、これが当てはまる場合は、単にドキュメントの改善を提案する必要があります...
また、Djangoを使用したgunicorn設定のベストプラクティスは素晴らしいでしょう。1を使用して、wsgiファイルにいくつかのデフォルトを設定し、追加の設定を避けることは理にかなっていますか?
gunicorn -c configfile
を起動しているバージョン「4」について、configfileはDjango_settingsをDjangoにポイントしますwsgi.py
は1でのみ使用されます。チェックアウト後、gunicorn
+ wsgi
を使用するのが最善の方法だと思います
$ gunicorn project.wsgi:application
Django 1.4以降を実行する場合は、gunicornコマンド とDjango 上記のようにリンクされています 。
また、インストールされたアプリとしてgunicornを追加することも避けます。つまり、アプリをテストするためにgunicornをインストールする必要がなく、時々役立つ場合があります。
設定について
使用するDjango設定ファイルは、ENV変数を介して渡すか、wsgi.py
ファイルでカスタマイズできます。同じプロジェクトから実行する必要がある複数の設定(たとえば、複数のWebサイト)がある場合、複数のwsgi.py
ファイルを作成することがあります- 詳細については、Django Doc を参照してください情報。
Carlのコメント からの新しいファイルを必要としないワンライナーソリューション:
Django_SETTINGS_MODULE=project.settings.prod gunicorn project.wsgi:application
より良い方法のように聞こえます(おそらく、覚えやすくするために、いくつかのシェルコマンドでそれを書くことになるでしょう)。
Gunicornの設定は-c settings_file
として渡すことができますが、他の方法を模索しており、見つかった場合はこの回答を更新しようとします。環境変数の使用は問題ないようですが、限られた場合のみ
特に、Djangoとgunicornの間でいくつかの設定を取得/共有するといいでしょう。 gunicornドキュメンテーションは言う:
現在、Pasterアプリケーションのみがフレームワーク固有の設定にアクセスできます。 WSGIアプリケーションに設定を提供したり、Djangoのsettings.pyから情報を取得したりするアイデアがある場合は、問題を開いてお知らせください。
(Update:賢い方法は見つかりませんでしたが、結局のところ、最も一般的なケースでは環境変数で十分です)。
run_gunicorn
を使用する方法が適していると思います。これは、最も簡単な使用方法でもあります。
これは基本的にgunicorn project.wsgi:application
と同じですが、INSTALLED_APPS
にgunicornを追加して、Djangoがrun_gunicorn
コマンドを認識するようにする必要があるため、おそらくデフォルトではありません。仕方...
ドキュメントにも here ...と記載されているため、gunicorn_Django
の使用はお勧めできません。
Manage.py(ローカルマシン上)とgunicornの両方で機能するソリューションを見つけた
すべての環境情報を含むファイルを作成します
# mysite/settings/set_env.py
import os
_environment = os.getenv('environment', None)
if _environment == "production":
os.environ.setdefault("Django_SETTINGS_MODULE", "mysite.settings.production")
Elif _environment == "development":
os.environ.setdefault("Django_SETTINGS_MODULE", "mysite.settings.development")
else:
os.environ.setdefault("Django_SETTINGS_MODULE", "mysite.settings.local")
このファイルをmanage.pyファイルとwsgi.pyファイルにインポートします。gunicornの実行で他に何も変更する必要はありません。