You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Django聊天应用添加Uvicorn触发AppRegistryNotReady错误

Django + Channels 启动 AppRegistryNotReady 错误解决

问题根源

从错误栈可以明确:启动ASGI服务时,routing.py导入chat.websocket_urls后,链式导入了消费者及模型文件,但此时Django应用注册表尚未加载完成——因为你的routing.py没有执行Django初始化流程,而WSGI服务正常是因为wsgi.py会自动处理初始化。

同时你的asgi.py存在笔误:导入了from chat import urls,但实际使用的是websocket_urls,会导致额外的导入错误。

解决方案

方案1:统一使用ASGI服务(推荐)

Channels的ASGI应用可以同时处理HTTP和WebSocket请求,无需分开启动WSGI和ASGI服务:

  1. 修正asgi.py代码:
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from chat import websocket_urls  # 修正导入路径
import os
import django

# 必须在导入任何Django相关模块前设置环境变量并初始化
os.environ.setdefault("DJANGO_CONFIGURATION", "Local")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "friendly_enigma.settings")
django.setup()

application = get_asgi_application()

application = ProtocolTypeRouter(
    {
        "http": application,
        "websocket": URLRouter(websocket_urls.websocket_urlpatterns)
    }
)
  1. 修改Dockerfile的启动命令:
CMD gunicorn friendly_enigma.asgi:application -k uvicorn.workers.UvicornWorker --bind=0.0.0.0:8000

方案2:保留双服务启动(不推荐)

如果必须分开运行WSGI和ASGI,需要确保routing.py包含完整的Django初始化流程:

创建/修改friendly_enigma/routing.py:

import os
import django

# 先完成Django初始化
os.environ.setdefault("DJANGO_CONFIGURATION", "Local")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "friendly_enigma.settings")
django.setup()

# 初始化完成后再导入路由相关模块
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from chat import websocket_urls

application = get_asgi_application()
application = ProtocolTypeRouter(
    {
        "http": application,
        "websocket": URLRouter(websocket_urls.websocket_urlpatterns)
    }
)

关键注意事项

  • 所有涉及Django模型、应用配置的导入,必须在django.setup()执行之后
  • 避免在模块顶层直接导入消费者、模型等依赖Django注册表的内容,除非已经完成初始化

内容的提问来源于stack exchange,提问作者Mike D Hovhannisyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:01:13