buffalo dev 默认不监听 app.go 等路由文件,仅监控 actions/、models/、templates/、assets/ 四个目录;修改路由需显式添加 --watch-dir ./app.go 或 --watch-dir ./routes 才能触发重启。

buffalo dev 为什么改了路由文件不重启?
Buffalo 的路由定义(比如 app.Routes() 中的 GET、POST)写在 app.go 或 routes.go 里,但 buffalo dev 默认不监听 app.go——它只盯 actions/、models/、templates/、assets/ 这四个目录。改了路由注册逻辑,进程不会自动重建。
-
app.go不在默认监听列表中,哪怕你只加了一行app.GET("/debug", DebugHandler),buffalo dev也完全无感 - 路由变更本质是 Go 代码逻辑变更,必须触发重新编译和进程重启,不能靠模板热替换解决
- 如果你把路由拆到
routes/子目录下,那个目录也不会被自动扫描
怎么让路由变更触发热重载?
唯一可靠方式是显式告诉 buffalo dev 去 watch 路由相关文件所在路径:
- 在项目根目录执行:
buffalo dev --watch-dir ./app.go
- 若路由逻辑分散在多个文件(如
routes/api.go、routes/admin.go),逐个加:buffalo dev --watch-dir ./app.go --watch-dir ./routes
- 注意路径必须是相对当前目录的,且不能用通配符(
./routes/*.go无效) -
--watch-dir可重复使用,但不支持 glob 模式;想覆盖整个routes/目录,就写--watch-dir ./routes,它会递归监听该目录下所有文件变更
改了路由后服务没反应?检查这三处
- 终端输出是否出现
Rebuilding... 或 Starting application at... —— 没有就说明监听根本没生效
- 确认
app.go 文件保存时编辑器没启用“延迟写入”或“atomic save”,某些 IDE(如 VS Code Remote-SSH)会先写临时文件再 mv,导致 fsnotify 漏触发
- 如果用了自定义
buffalo.dev.yml,检查里面是否覆盖了 watch_dirs 配置,它会完全取代命令行参数,优先级更高
别指望路由热重载能保留连接状态
Rebuilding... 或 Starting application at... —— 没有就说明监听根本没生效 app.go 文件保存时编辑器没启用“延迟写入”或“atomic save”,某些 IDE(如 VS Code Remote-SSH)会先写临时文件再 mv,导致 fsnotify 漏触发 buffalo.dev.yml,检查里面是否覆盖了 watch_dirs 配置,它会完全取代命令行参数,优先级更高 buffalo dev 的每次重启都是完整进程 kill + go build + 新进程拉起,这意味着:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 所有内存中的 session、缓存、全局 map 全部丢失
- 数据库连接池被销毁重建,连接数可能短暂飙升
- WebSocket 连接全部断开,没有优雅关闭机制
- 如果你在
app.go里初始化了 long-running goroutine(比如定时清理任务),它也会被中断并重开
真正需要高频调试图路由的场景,建议直接用 air 替代:
air -c .air.toml --exec "go run main.go"
,并在 .air.toml 里明确 include app.go 和路由目录——比折腾 buffalo 内置监听更可控。










