Как решить проблему "django.core.exceptions.AppRegistryNotReady: приложения еще не загружены"?

Я развернул свое веб-приложение django на своем сервере heroku, и оно работало нормально, пока я не добавил подключение веб-сокета, которое показывает содержимое объекта модели в отдельном URL-адресе, как только этот объект создан. Для этого я использовал каналы Django с сервером redis, размещенным на redislabs. Чтобы запустить приложение asgi, я попытался использовать сервер daphne, но при попытке запустить сервер daphne с помощью следующей команды:$daphne smartResturant.asgi:channel_layer --port 8888это говорит
"django.core.exceptions.AppRegistryNotReady: приложения еще не загружены"

Мой asgi.py

import os
import django
from smartResturant.routing import get_default_application


os.environ.setdefault("DJANGO_SETTINGS_MODULE", "smartResturant.settings")
django.setup()
application = get_default_application()

Мои settings.py

ASGI_APPLICATION = 'smartResturant.routing.application'
CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'channels_redis.core.RedisChannelLayer',
        'CONFIG': {

            "hosts": ['redis://:xxxxxxxx@redis-13131.c85.us-east-1-2.ec2.cloud.redislabs.com:13131']     
        },

    },
}

Он работает нормально, когда я работаю локально, без использования сервера daphne. Но я обнаружил, что для запуска приложений на основе asgi на размещенном сервере, вы должны использовать сервер daphne, а я не могу его запустить. Любая помощь будет оценена!

1 ответ

Эта ошибка может возникать, когда вы добавляете приложение в INSTALLED_APPS в файле settings.py, но у вас не установлено это приложение на вашем компьютере. У вас есть два решения:

  1. Установите это приложение, используя менеджеры пакетов, такие как pip in django
  2. Или закомментируйте это установленное приложение в файле settings.py

Эта ошибка также может возникнуть, если вы находитесь не в своей виртуальной среде, которую вы, возможно, создали для своего проекта.

Когда вы запускаете такие команды, как python manage.py runserver, django автоматически запускает django.setup для вас, используя переменную окружения DJANGO_SETTINGS_MODULE. Таким образом, код в views.py может обращаться к моделям, потому что django гарантирует, что django.setup вызывается до импорта представлений. Поскольку вы запускаете скрипт оболочки в виде простого файла Python, вы должны вручную вызвать django.setup.

Другие вопросы по тегам