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

Django与uvicorn页面加载时出现`closing handshake failed`错误求助

核心错误原因

你遇到的ValueError: No application configured for scope type 'websocket'报错,是因为ASGI入口文件没有配置websocket类型的请求处理器,后续的连接关闭异常是该错误触发的次生问题。

解决方案

1. 修正asgi.py配置

你将websocket路由配置单独写在了routing.py中,但没有将该配置整合到ASGI入口中,替换你的asgi.py内容如下:

import os
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
import chat.routing

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'twitch_chess.settings')

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

修改完成后原单独的routing.py文件可删除,避免配置冲突。

2. 适配Heroku的Redis配置

你当前的CHANNEL_LAYERS默认连接本地Redis,Heroku环境下需要读取平台注入的Redis环境变量,修改settings.py的CHANNEL_LAYERS配置:

import os
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [os.environ.get("REDIS_URL", ("127.0.0.1", 6379))],
        },
    },
}

修改前请确认你已在Heroku应用后台安装了Redis插件,安装完成后平台会自动生成REDIS_URL环境变量。

3. 修正启动配置

检查项目根目录下的Procfile,将web启动命令修改为uvicorn启动ASGI应用的格式:

web: uvicorn twitch_chess.asgi:application --host 0.0.0.0 --port $PORT

4. 补充校验项

  • 确认channels已添加到settings.py的INSTALLED_APPS列表中
  • 确认chat/routing.py中存在websocket_urlpatterns变量,且路径匹配前端请求的/ws/ticks/规则,示例如下:
from django.urls import re_path
from . import consumers

websocket_urlpatterns = [
    re_path(r'ws/ticks/$', consumers.TicksConsumer.as_asgi()),
]

以上配置全部修改完成后重新部署即可解决问题。

内容的提问来源于stack exchange,提问作者Brandon Slaght

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:48:00