部署Django项目到Heroku时consumers.py导入模型触发AppRegistryNotReady错误如何解决
解决方案
问题核心是Django应用注册完成前就提前触发了模型加载逻辑,调整以下配置即可修复:
1. 修正asgi.py的导入顺序
必须先完成Django初始化,再导入依赖应用配置的模块,修改后代码如下:
import os import django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'spotgame.settings') django.setup() # 所有依赖Django运行环境的导入必须放在django.setup()之后 from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application import spotifymusicgame.routing application = ProtocolTypeRouter({ "http": get_asgi_application(), "websocket": AuthMiddlewareStack( URLRouter( spotifymusicgame.routing.websocket_urlpatterns ) ), })
2. 修正settings.py的ASGI入口配置
你当前配置的ASGI入口指向错误,修改为实际的asgi文件路径:
ASGI_APPLICATION = "spotgame.asgi.application"
3. 可选优化(避免同类问题复发)
将consumers.py中的模型导入改为方法内延迟导入,删除顶层的from .models import roomInfo,修改max_users方法如下:
@database_sync_to_async def max_users(self): from .models import roomInfo max_user = roomInfo.objects.get(id=1).max_player return max_user
修改完成后重新提交代码部署到Heroku即可正常运行。
内容的提问来源于stack exchange,提问作者Aleck
相关产品推荐
相关产品推荐

