我已经将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服务器,但我无法运行它。任何帮助将不胜感激!
答案 0 :(得分:0)
当您在settings.py文件的INSTALLED_APPS中添加一个应用程序但您的计算机中未安装该应用程序时,可能会发生此错误。您有两种解决方案:
如果您不在为项目创建的虚拟环境中,也会出现此错误。
当您运行诸如python manage.py runserver之类的命令时,django使用DJANGO_SETTINGS_MODULE环境变量自动为您运行django.setup。因此views.py中的代码可以访问模型,因为django确保在导入视图之前调用django.setup。由于您将外壳程序脚本作为简单的python文件运行,因此必须手动调用django.setup。