Использование 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()

Чтобы узнать больше, вы можете прочитать Как загружаются приложения

Вернуться на верх