如何解决“ django.core.exceptions.AppRegistryNotReady:应用尚未加载”的问题?

时间:2019-07-12 15:48:16

标签: django daphne asgi

我已经将django webapp部署到了我的heroku服务器上,并且运行良好,直到我添加了一个websocket连接,该连接在创建对象后立即在单独的url中显示模型对象的内容。为此,我将Django通道与redislabs上托管的redis服务器一起使用。要运行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 个答案:

答案 0 :(得分:0)

当您在settings.py文件的INSTALLED_APPS中添加一个应用程序但您的计算机中未安装该应用程序时,可能会发生此错误。您有两种解决方案:

  1. 在django中使用包管理器(如pip)安装该应用程序
  2. 或在settings.py文件中注释掉已安装的应用程序

如果您不在为项目创建的虚拟环境中,也会出现此错误。

当您运行诸如python manage.py runserver之类的命令时,django使用DJANGO_SETTINGS_MODULE环境变量自动为您运行django.setup。因此views.py中的代码可以访问模型,因为django确保在导入视图之前调用django.setup。由于您将外壳程序脚本作为简单的python文件运行,因此必须手动调用django.setup。