news 2026/9/13 17:58:06

Teable 开发模式修改后端代码不生效、3000 端口被占用怎么排查?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Teable 开发模式修改后端代码不生效、3000 端口被占用怎么排查?

Teable 开发模式修改后端代码不生效、3000 端口被占用怎么排查?

【免费下载链接】teable✨ AI Spreadsheet for Business项目地址: https://gitcode.com/GitHub_Trending/te/teable

在 Teable 仓库里以开发模式跑起来之后(apps/nestjs-backend下执行pnpm dev),有两个容易同时出现的现象:改完后端代码刷新页面却不生效,以及 3000 端口被残留进程占用导致重启失败。Teable 的 CONTRIBUTING.md 在 Known Issues 一节把这两个现象归为同一类问题:开发模式下的热重载重启引发的端口冲突,并给出了用lsof -i:3000定位、kill -9清理、再pnpm dev重启的处理路径。这篇文章按文档给出的流程走一遍,先交代开发模式的端口分配,再给出完整的检查与恢复步骤。适用环境:Linux/Mac(Windows 需使用 WSL2),PostgreSQL 开发库依赖 Docker。

为什么会出现这两个现象:开发模式的端口分配

先看 Teable 开发模式里各端口被谁占用,这是理解问题前提,配置来源是 apps/nextjs-app/.env.development:

  • PORT=3000:后端(NestJS)HTTP 服务端口;
  • SOCKET_PORT=3001:应用自身的 websocket 端口;
  • PUBLIC_ORIGIN=http://localhost:3000

按 CONTRIBUTING.md 的说明,开发模式下 Next.js 会占用 3000 端口的 websocket 通道来触发热重载,为了避免冲突,应用的 websocket 挪到了 3001,所以你会在.env.development.local里看到SOCKET_PORT=3001。而生产环境默认用 3000 端口处理 websocket 请求。

冲突的触发条件文档也写清楚了:开发模式下代码改动会触发热重载,如果改动影响到apps/nestjs-backend(包括packages/corepackages/db-main-prisma),nodejs 进程可能重启,重启过程中就可能留下端口冲突。表现就是后端代码改动看起来没有生效,此时 3000 端口大概率还被旧进程占着。

准备:按文档方式启动开发环境

如果还没跑起来,按 CONTRIBUTING.md(与 README.md 的 Development 一节一致)初始化:

# 启用包管理器 corepack enable # 安装依赖 pnpm install

Teable 开发使用 PostgreSQL,且要求已安装 Docker。初始化数据库用:

make switch-db-mode

这一步会交互式询问选择哪种数据库(1) postgres(pg)),选择1即可;它对应 Makefile 中的switch-db-mode目标,会启动 postgres 容器、等待 healthy 后执行 prisma 的 generate 与 migrate deploy。

可选的环境配置覆盖,用于需要自定义变量时:

cd apps/nextjs-app cp .env.development .env.development.local

最后启动开发服务:

cd apps/nestjs-backend pnpm dev

这条命令会自动把后端和前端服务器一起启动并开启热重载。pnpm dev背后是 apps/nestjs-backend/package.json 里的nest start --webpackPath ./webpack.dev.js -w,即 webpack watch 模式,文件变化自动重载。

修改后端代码不生效时:检查 3000 端口

按文档给出的排查顺序,当后端代码改动看似没有生效时,先确认端口是否被占用:

lsof -i:3000

判断方式:输出中出现监听 3000 端口的进程(通常是上一个没退干净的 node 进程),就说明是文档描述的端口冲突,继续下一步清理;如果没有任何进程占用 3000,则不属于文档覆盖的这个已知问题,需要另行排查(文档未给出其他情形的处理)。

释放端口并重启开发服务

清理命令会强制终止进程,执行前确认[pid]就是上一步lsof -i:3000输出中占用 3000 端口的进程 PID,不要对无关进程执行:

kill -9 [pid] # [pid] 替换为 lsof 输出中的进程 PID

然后回到后端目录重新启动:

cd apps/nestjs-backend pnpm dev

文档给出的恢复路径到此结束:旧进程被清理、开发服务以热重载重新跑起来后,后续对apps/nestjs-backend的改动即可正常热更新。

限制与注意事项

  • SOCKET_PORT=3001是开发模式的设计值,不是配置错误,不要把它改回 3000;生产环境默认使用 3000 处理 websocket 请求,两者行为不同。
  • 热重载端口冲突主要出现在改动影响apps/nestjs-backendpackages/corepackages/db-main-prisma)的场景,这是文档点名的触发范围。
  • 拉取最新代码后的常规维护,文档建议在pnpm install之后再执行一次make switch-db-mode,保持依赖与数据库 schema 同步;如果你刚改过 schema,还涉及make gen-prisma-schemamake db-migration等迁移流程,超出本文排查范围,详见 CONTRIBUTING.md 的 Database Migration Workflow 一节。

【免费下载链接】teable✨ AI Spreadsheet for Business项目地址: https://gitcode.com/GitHub_Trending/te/teable

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 17:53:14

嵌入式开发六大实战避坑指南:从ISR误用到软硬版本绑定

1. 这不是一篇“悔过书”,而是一份嵌入式老兵的实战避坑清单干了这么多年嵌入式,我最后悔的几件事——这句话刚在技术群刷出来,底下秒回99条“1”“泪目”“正在重蹈覆辙”。它不像“如何学好C语言”那样带着教学意图,也不像“STM…

作者头像 李华
网站建设 2026/9/13 17:53:11

GE VCMIH2CB板卡替换的七项硬性技术约束

1. 这块板卡不是“能用就行”,而是“差0.1毫秒就跳机”的关键节点GE IS215VCMIH2CB——这个编号在Mark VIe燃机控制系统里,不是普通备件,它是VCMI(Versatile Communication Module Interface)系列中专为高实时性通信设…

作者头像 李华
网站建设 2026/9/13 17:52:45

Java实现论文查重系统:中文分词、N-Gram与相似度算法实战指南

简介:一份基于Java的论文查重系统完整源码包,面向计算机相关专业学生、Java开发者与文本相似度检测初学者。系统核心采用SimHash算法计算原文与待检测论文之间的相似度,输出重复率结果,支持文件输入输出和命令行参数指定路径&…

作者头像 李华
网站建设 2026/9/13 17:51:53

AI助力跨境电商商品描述本地化与转化提升

1. 项目背景与核心价值跨境电商业内人都知道,商品描述本地化是个长期痛点。去年帮深圳某3C卖家做德语站优化时,他们团队用谷歌翻译直接生成的产品说明,把"防水等级IP68"译成了"可以带着游泳",导致退货率激增2…

作者头像 李华