真正被运行时读取的是:models.NewDB()(从DB_URL读连接)、actions.App()(路由与中间件注册入口)、config/routes.go(唯一路由注册文件)、templates/下.plush.html文件(Plush直接渲染);database.yml和main.go修改无效。

Buffalo 项目不是靠 database.yml 连数据库,也不是靠修改 main.go 来加逻辑——这两处改了基本白费,还容易在后续命令中被覆盖。
buffalo new 生成的结构里哪些文件真会被运行时读取
Buffalo 的运行逻辑高度集中于 Go 代码,YAML 配置只是给人看的。真正起作用的是:
-
models.NewDB():决定数据库连接方式,通常从环境变量DB_URL读取;database.yml完全不参与解析 -
actions.App():由main.go调用,但你不该在这里写业务逻辑;所有路由和中间件注册都在actions/和config/下的 Go 文件里 -
config/routes.go:所有 HTTP 路由的唯一注册入口,buffalo dev启动时只认这个 -
templates/下的.plush.html文件:Plush 模板引擎直接渲染,不走 Go template 或 html/template
buffalo dev 重启不生效?检查 buffalo.dev.yml 和环境变量
开发服务器行为由 buffalo.dev.yml 控制,但它的改动不会热生效——必须手动重启 buffalo dev。常见疏漏点:
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
- 端口改了但服务没重启 → 仍跑在旧端口上
- 启用了
https: true但没配证书路径 → 启动失败且错误提示藏在日志末尾,容易忽略 - 代理配置(
proxy)写错格式(比如少了个冒号)→buffalo dev直接 panic,报错是yaml: unmarshal errors - 想换数据库但只改了
database.yml→ 没用,得设DB_URL=postgres://...环境变量再重启
assets 目录下改了 JS/CSS 为什么页面没更新
Buffalo 默认用 packr 打包前端资源进二进制,开发时却依赖 webpack dev server 实时构建。所以:
- 改了
assets/js/app.js后,必须等终端里 webpack 的Compiled successfully出现才刷新页面 - 如果改完没反应,先
kill -9掉所有node进程,再buffalo dev—— webpack watcher 有时会卡死 -
assets/css/application.css里引入其他 CSS 文件,要用@import "xxx.css",不能用require("xxx.css"),后者是 webpack 语法,但 Buffalo 的默认配置不处理它 - 静态资源路径在模板里统一用
assetPath("js/app.js"),硬写/public/js/app.js在生产环境会 404
models 目录里加新表后迁移失败的典型原因
Buffalo 用 pop/soda 做 ORM 和迁移,但新手常卡在几个衔接点上:
- 新增 model 文件(如
models/post.go)后,忘了在models/models.go的PopMap里注册 →soda migrate up会跳过这张表 - 写了
soda generate fizz create_posts,但生成的 fizz 文件名不是xxx_create_posts.up.fizz→ 缺.up.fizz后缀,迁移不识别 - 执行
soda migrate up报错no database url provided→ 不是database.yml没填,而是没设DB_URL环境变量 - 想回滚但用
soda migrate down→ 它只退一步,要退多步得加-n 3参数,否则静默失败
最易被忽略的一点:Buffalo 的 buffalo dev 不自动触发迁移,哪怕你改了模型或 fizz 文件。每次改完模型或迁移脚本,都得手动跑一次 soda migrate up,否则数据库和代码永远对不上。

















