3

我已经将我的 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()

我的设置.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 服务器,而我无法运行它。任何帮助将不胜感激!

4

1 回答 1

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在views被导入之前被调用。由于您将 shell 脚本作为简单的 python 文件运行,因此您必须手动调用 django.setup。

于 2019-07-12T16:51:56.270 回答