ASGIを使用してデプロイする方法—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/howto/deployment/asgi/index
移動先:案内検索

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.pymysite.settingsに設定します。ここで、mysiteはプロジェクトの名前です。


ASGIミドルウェアの適用

ASGIミドルウェアを適用したり、Djangoを別のASGIアプリケーションに埋め込んだりするには、Djangoのapplicationオブジェクトをasgi.pyファイルにラップします。 例えば:

from some_asgi_library import AmazingMiddleware
application = AmazingMiddleware(application)