ASGIを使用してデプロイする方法
Djangoは、WSGIだけでなく、非同期Webサーバーおよびアプリケーションの新しいPython標準である ASGI へのデプロイもサポートしています。
Djangoの:djadmin: `startproject` 管理コマンドは、デフォルトのASGI構成をセットアップします。これは、プロジェクトの必要に応じて微調整し、ASGI準拠のアプリケーションサーバーに使用を指示できます。
Djangoには、次のASGIサーバーの入門ドキュメントが含まれています。
applicationオブジェクト
WSGIと同様に、ASGIでは、アプリケーションサーバーがコードとの通信に使用するapplication
呼び出し可能オブジェクトを提供しています。 これは通常、サーバーにアクセス可能なPythonモジュールでapplication
という名前のオブジェクトとして提供されます。
:djadmin: `startproject` コマンドは、そのようなapplication
呼び出し可能ファイルを含むファイル<project_name>/asgi.py
を作成します。
開発サーバー(runserver
)では使用されませんが、開発中または本番環境のいずれのASGIサーバーでも使用できます。
ASGIサーバーは通常、文字列として呼び出し可能なアプリケーションへのパスを取ります。 ほとんどのDjangoプロジェクトでは、これはmyproject.asgi:application
のようになります。
警告
DjangoのデフォルトのASGIハンドラーはすべてのコードを同期スレッドで実行しますが、独自の非同期ハンドラーを実行する場合は、非同期の安全性に注意する必要があります。
非同期コードでブロッキング同期関数またはライブラリを呼び出さないでください。 Djangoは、非同期セーフではないDjangoの部分でこれを行うことを防ぎますが、サードパーティのアプリやPythonライブラリには同じことが当てはまらない場合があります。
設定モジュールの構成
ASGIサーバーがアプリケーションをロードするとき、Djangoは設定モジュールをインポートする必要があります—ここでアプリケーション全体が定義されます。
Djangoは、 DJANGO_SETTINGS_MODULE 環境変数を使用して、適切な設定モジュールを見つけます。 設定モジュールへの点線のパスが含まれている必要があります。 開発と本番には異なる値を使用できます。 それはすべて、設定をどのように整理するかによって異なります。
この変数が設定されていない場合、デフォルトのasgi.py
はmysite.settings
に設定します。ここで、mysite
はプロジェクトの名前です。
ASGIミドルウェアの適用
ASGIミドルウェアを適用したり、Djangoを別のASGIアプリケーションに埋め込んだりするには、Djangoのapplication
オブジェクトをasgi.py
ファイルにラップします。 例えば:
from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)