web-dev-qa-db-ja.com

runserverがチャンネル2を使用している間はASGI_APPLICATIONモジュールをインポートできません

私はチャンネルのチュートリアルに従ってきましたが、これらのエラーの実行中に

パッケージのバージョンはchannels == 2.1.2Django == 2.0.4です。

見逃したこと settings.py

INSTALLED_APPS = [
   "channels"
    ....
]

ROOT_URLCONF = 'myapp.urls'
ASGI_APPLICATION = "myapp.routing.application"

追加されたファイルmayapp/routing.py

from channels.routing import ProtocolTypeRouter 

application = ProtocolTypeRouter({
    # Empty for now (http->Django views is added by default)
})

これはエラーログです

System check identified no issues (0 silenced).
August 01, 2018 - 13:11:42
Django version 2.0.4, using settings 'myapp.local_settings'
Starting ASGI/Channels version 2.1.2 development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f71ecfb6400>
Traceback (most recent call last):
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/routing.py", line 33, in get_default_application
    module = importlib.import_module(path)
  File "/home/vkchlt0192/myapp/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'myapp.routing'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/Django/utils/autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/management/commands/runserver.py", line 80, in inner_run
    application=self.get_application(options),
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/management/commands/runserver.py", line 105, in get_application
    return StaticFilesWrapper(get_default_application())
  File "/home/vkchlt0192/myapp/lib/python3.5/site-packages/channels/routing.py", line 35, in get_default_application
    raise ImproperlyConfigured("Cannot import ASGI_APPLICATION module %r" % path)
Django.core.exceptions.ImproperlyConfigured: Cannot import ASGI_APPLICATION module 'myapp.routing'
12

Consumer.pyで潜在的なエラー(おそらくインポートエラー)を確認します。また、settings.pyのINSTALLED_APPSの最初の項目としてチャネルを配置してみてください。

チャネルのドキュメントで述べたように:

Channels開発サーバーは、過負荷または置換のrunserverコマンドを必要とする他のサードパーティアプリと競合します。このような競合の例として、whitenoiseのwhitenoise.runserver_nostaticがあります。このような問題を解決するには、チャンネルをINSTALLED_APPSの一番上に移動するか、問題のアプリを完全に削除してください。

0
Bharat Rajani

私は次の方法で問題を解決しました:

  • python manage.py migrate
  • python manage.py makemigrations
  • python manage.py migrate

routing.pyファイルを間違ったディレクトリに配置していないかどうかも確認してください。 'myproject/routing.py'である必要があります

0
Ritik Jain

私も同じ問題を抱えていて、それを解決するためにあらゆることをし、別の仮想環境を作成し、古いバージョンのDjangoをインストールしましたが、2日間のハードウェアの後、私は自分のconsumer.pyファイルが消費者の 's'だけが欠落しており、その後もrouting.pyファイルで修正しました。これが問題である可能性もあります。最初にすべてのファイル名を確認してください。

ただ変える

ASGI_APPLICATION = mysite.routing.application

ASGI_APPLICATION = "routing.application"

0
Shersha Fn

routing.pyの代わりにmayapp/mayapp/routing.py内にmayapp/routing.pyファイルを配置する必要があります

0
wint3rmute

私も同じ問題に直面しています。
確認してください:
=> routing.pyファイルはプロジェクトのルートフォルダー内にある必要があります(Djangoサーバー、settings.py、wsgi.py、..があるサーバー)
=> settings.pyインクルードで、ASGI_APPLICATION = "yourprojectrootname.routing.application"

=>たまに、routing.pyファイル内のコーディングがこのエラーを生成する場合があります。これが当てはまるかどうかを確認するために、すべてのコーディングを削除し、一般的なテンプレートコーディングを入力します。

from channels.routing import ProtocolTypeRouter

application = ProtocolTypeRouter({
    # Empty for now (http->Django views is added by default)
})

次に、「python manage.py runserver」を実行します。今回はエラーが発生しなかった場合、問題はrouting.py内のコーディングにあります。問題をデバッグして修正します。

=>他の場合、これはバージョンの問題である可能性があります。チャンネルへのダウングレード== 2.1.2は機能します

0
Jerome

私の場合、consumer.pyに未解決のパッケージがありました。チャンネルの.pyファイルに未解決のパッケージがないか確認してください。

0
Mawardy

誰かがこれに沿って来た場合。覚えておいてください:ASGI_APPLICATION = "myapp.routing.application"は、settings.pyの一番下に移動して、本番環境で問題が発生しないようにする必要があります。

mysite/myapp/routing.py

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing

application = ProtocolTypeRouter({
    # (http->Django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            myapp.routing.websocket_urlpatterns
        )
    ),
})

myapp/routing.py

from Django.urls import path
from . import consumers

websocket_urlpatterns = [
    path('chatroompage', consumers.ChatConsumer),
]
0
Jay