WSGI とともにデプロイするには¶
Django の主要なデプロイプラットフォームは、 Web サーバと Web アプリケーション に関して Python の標準である WSGI です。
Django の startproject
管理コマンドは、最小限のデフォルト WSGI 設定をセットアップしてくれます 。このデフォルト WSGI 設定は、あなたのプロジェクトに合わせて調整でき、WSGI に準拠したアプリケーションサーバにその設定を使用させることができます。
Django には以下の WSGI サーバのために、手引きとなるドキュメントが用意されています:
application
オブジェクト¶
WSGI デプロイでキーとなる概念は、Web サーバがあなたのコードと通信するために使う application
という呼び出し可能オブジェクトです。これは一般的に、サーバにアクセスできる Python モジュールの中で application
という名前のオブジェクトとして提供されています。
startproject
コマンドは、この application
呼び出し可能オブジェクトを含む <project_name>/wsgi.py
ファイルを生成します。
これは、Django のデプロイサーバーによって、また WSGI デプロイプロダクションにおいて、これら両方で使われます。
WSGI サーバーは application
呼び出し可能オブジェクトへのパスを、その設定から取得します。Django のビルトインサーバー (要するに runserver
コマンド) は、WSGI_APPLICATION
の設定からこれを読み出します。デフォルトでは、 <project_name>/wsgi.py
内の application
呼び出し可能オブジェクトを指す <project_name>.wsgi.application
がセットされています。
Settings モジュールを設定する¶
WSGI サーバがあなたのアプリケーションを読み込むとき、Django は Settings モジュールをインポートする必要があります。そのモジュールは、あなたのアプリケーション全体が定義されている場所です。
Django は適切な Settings モジュールを見つけるために、 DJANGO_SETTINGS_MODULE
環境変数を使用します。これは設定モジュールへのドット区切りのパスを含んでいなければなりません。開発時と実運用時で別々の値を使用することも可能です。どのように設定を組織するか次第です。
この値が設定されていない場合、初期生成ファイルである wsgi.py
は、 mysite.settings
をこの値として設定します。ここでの mysite
はプロジェクトの名前です。このようにして初期設定ファイルを見つけるのが、 runserver
にあらかじめ用意されている方法です。
注釈
環境変数は、同一プロセス内においては同じ値が使われます。このため、単一プロセスで複数の Django サイトを運用する場合は、適切に機能しません。これは mod_wsgi を使用する場合に起こります。
この問題を回避するためには、サイトごとに固有の daemon プロセスを mod_wsgi の daemon モードで運用するか、もしくは wsgi.py
ファイル内で os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
を実行して環境変数の値を上書きします。
WSGIミドルウェアを適用する¶
WSGI ミドルウェア を適用するには、アプリケーションオブジェクトをラップします。例えば、 wsgi.py
の一番下に以下の行を追加します:
from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)
DjangoのWSGIアプリケーションをカスタムWSGIアプリケーションに置き換え、その後でDjangoのWSGIアプリケーションに委譲することもできます。これは、Djangoアプリケーションを他のフレームワークのWSGIアプリケーションと組み合わせたい場合に有効です。