Использование Django Tenants с каналами - AppRegistryNotReady
Мы пытаемся использовать django channels для реализации websockets в многопользовательском django-приложении.
Я следовал странице учебника в документации django channels, а также применял инструкции, найденные на странице развертывания. Однако я вижу ошибку django.core.exceptions.AppRegistryNotReady при запуске pytest или даже при выполнении простой "python manage.py check".
Я не уверен, есть ли какие-то проблемы совместимости между пакетами, которые я имею в INSTALLED_APPS настроек django, но размещение "channels" в INSTALLED_APPS вызывает ошибку.
Для запуска приложения мы используем docker. Я также изменил сценарий запуска, чтобы использовать daphne вместо gunicorn. Затем я запускаю свои тестовые примеры из контейнера django в docker.
Вот как выглядят мои файлы:
asgi.py
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "arkis.settings")
django.setup()
from channels.auth import AuthMiddlewareStack
from channels.http import AsgiHandler
from channels.routing import ProtocolTypeRouter, URLRouter
from arkis.integrations.wizard.routing import websocket_urlpatterns
application = ProtocolTypeRouter(
{"http": AsgiHandler(), "websocket": AuthMiddlewareStack(URLRouter(websocket_urlpatterns))}
)
routing.py
from django.urls import re_path
from arkis.integrations.wizard.consumers import WizardListConsumer
websocket_urlpatterns = [
re_path(r"ws/integrations/(?P<integration_name>)/wizard/list/$", WizardListConsumer.as_asgi())
]
Вот подробности о версии:
- Django==2.2.15
- channels==3.0.5
- daphne==3.0.2
- django-арендаторы==3.1.0
Глядя на трассировку стека, я предполагаю, что ошибка кроется в арендаторах django, но я понятия не имею, что делать дальше.
Ошибка связана с тем, что вы пытаетесь получить доступ к некоторым моделям, а приложение, в котором находятся эти модели, по каким-то причинам еще не загружено.
Чтобы решить эту проблему, попробуйте добавить эти слова перед всем в вашем consumer.py, а также в asgi.py
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "arkis.settings")
django.setup()
Чтобы узнать больше, вы можете прочитать Как загружаются приложения