Supabase本地部署WebSocket连接失败,求助排查原因
解决本地Supabase Realtime WebSocket连接失败问题
针对你更新技术栈(Supabase CLI、supabase-js、Postgres 15升级)后出现的本地Realtime WebSocket连接失败问题,以下是逐步排查和解决方法:
1. 修正代码中的表名配置错误
你的监听配置存在格式错误:table字段无需添加public:前缀(已通过schema: "public"指定模式),本地Realtime服务对格式要求更严格,生产环境可能做了兼容处理。修正后的代码:
supabase .channel("public:table_name") .on( "postgres_changes", { event: "*", schema: "public", table: "table_name", // 移除public:前缀 }, (payload) => console.log(payload) ) .subscribe();
2. 检查Realtime服务状态与日志
- 执行
supabase status,确认realtime服务处于running状态。如果未启动,执行supabase stop && supabase start重启服务。 - 查看Realtime服务的详细日志,排查启动或连接错误:
重点关注Postgres连接失败、权限不足等报错信息。supabase logs -f realtime
3. 验证Postgres 15的Realtime依赖配置
升级Postgres 15后,需确保Realtime所需的扩展和权限配置正确:
- 进入本地Postgres终端:
supabase db psql - 检查并安装
realtime扩展:SELECT * FROM pg_extension WHERE extname = 'realtime'; -- 如果无结果,执行安装命令 CREATE EXTENSION IF NOT EXISTS realtime; - 检查Postgres的WAL级别是否为
logical(Realtime依赖逻辑复制):
如果不是,在SHOW wal_level;supabase/config.toml的[db]段添加配置:
然后重启Supabase服务。[db] wal_level = "logical" - 确保
realtime用户拥有必要权限:ALTER USER realtime WITH LOGICAL_REPLICATION; GRANT USAGE ON SCHEMA public TO realtime; GRANT SELECT ON ALL TABLES IN SCHEMA public TO realtime;
4. 检查config.toml的Realtime配置
打开supabase/config.toml,确认:
[realtime]段中enabled = true(确保Realtime服务开启)- 端口配置与代码中使用的
54321一致(可通过supabase status查看实际端口)
5. 清理本地缓存并重新初始化(谨慎操作)
如果以上步骤无效,可能是升级后Docker镜像或缓存存在问题:
- 先备份本地数据:
supabase db dump -f local_backup.sql - 停止服务并删除本地缓存目录:
supabase stop rm -rf .supabase - 重新初始化并启动服务:
supabase init supabase start - 恢复备份数据:
supabase db restore local_backup.sql
内容的提问来源于stack exchange,提问作者Sumit Ghosh
相关产品推荐
相关产品推荐

