каналы django ImproperlyConfigured: невозможно найти приложение в модуле ASGI_APPLICATION - PullRequest
0 голосов
/ 05 ноября 2018

Я смотрел на похожие вопросы, касающиеся этой ошибки при настройке обмена сообщениями с Django. Я попытался обновить Django и Channels и изменить файл needs.txt.

"Cannot find %r in ASGI_APPLICATION module %s" % (name, path)
django.core.exceptions.ImproperlyConfigured: Cannot find 'app' in ASGI_APPLICATION module <MyApp>.routing

моя конфигурация маршрутизации соответствует учебнику в mysite / routing

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

и оператор импорта, который должен быть просто

import chat.routing

не распознается, поскольку учебник утверждает, что он должен быть в моей IDE.

моя структура каталогов точно соответствует учебнику

с настройкой конфигурации

INSTALLED_APPS = [
'channels',
'chat',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

и

ASGI_APPLICATION = 'chat.routing.application'

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Я получил такую ​​ошибку при запуске моих каналов Django routing.py с использованием daphne сервера.

django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

Это то, что объясняет документация о daphne серверах,

Daphne - это сервер протоколов HTTP, HTTP2 и WebSocket для ASGI и ASGI-HTTP, разработанный для поддержки каналов Django.

Поддерживает автоматическое согласование протоколов; нет необходимости использовать префикс URL для определения конечных точек WebSocket по сравнению с конечными точками HTTP.

Примечание: Daphne 2 не совместима с приложениями Channel 1.x, только с каналами 2.x и другими приложениями ASGI. Установите версию 1.x Daphne для каналов 1.x.

Как видите, мы можем использовать протоколы HTTP и WS через сервер daphne без использования сервера Gunicorn . Что вы можете сделать, это просто добавить строку ниже в начало вашего routing.py файла.

from .wsgi import *

Так что теперь ваш routing.py файл должен быть таким,

# DockerDjangoNginx is my project name
# your routing.py file should be in this location where the wsgi.py file is placed
# DockerDjangoNginx/DockerDjangoNginx/routing.py

from .wsgi import *  # add this line to top of your code
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import comapp.routing as routing

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

Теперь вы можете запустить сервер daphne .

(venv) [root@t2mdocker]#daphne -b 0.0.0.0 -p 8000 DockerDjangoNginx.routing:application
2019-05-30 03:33:06,390 INFO     Starting server at tcp:port=8000:interface=0.0.0.0
2019-05-30 03:33:06,391 INFO     HTTP/2 support enabled
2019-05-30 03:33:06,391 INFO     Configuring endpoint tcp:port=8000:interface=0.0.0.0
2019-05-30 03:33:06,392 INFO     Listening on TCP address 0.0.0.0:8000

Если вы видите что-то вроде HTTP/2 support not enabled (install the http2 and tls Twisted extras) при запуске daphne server, вы можете запустить pip install -U Twisted[tls,http2], чтобы исправить эти ошибки.

0 голосов
/ 07 ноября 2018

Уверен, что это была проблема. Необходимо добавить этот файл asgi.py рядом с wsgi.py

import os
import django

from channels.routing import get_default_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<myproj>.settings")
django.setup()
application = get_default_application()

и запустить сервер с

(vEnv)$daphne <myproj>.asgi:application --port 8888
...