buffalo new 命令必须在空目录下运行,否则静默失败或报错;生成项目后须立即执行 go mod tidy 并配置 DB_URL 环境变量,二者缺一不可。

buffalo new 命令必须在空目录下运行
直接在已有文件的目录里执行 buffalo new myapp 会报错退出,不是提示“目录非空”,而是静默失败或 panic。Buffalo 不做覆盖式初始化,它要求干净起点——哪怕目录里只有一个 .git 或 README.md,都得先清掉。
- 推荐做法:新建专用目录,cd 进去再运行命令
- 错误现象:终端卡住几秒后直接返回 shell 提示符,无任何输出;或报
failed to create app: mkdir ./myapp: file exists - 注意
buffalo new生成的是完整项目,不是子目录;所以别在已有 Go module 里跑它,否则go.mod冲突
buffalo new --api 会跳过前端构建链路
如果你只写 API 服务,加 --api 能省掉大量无关依赖和后续麻烦。它不生成 assets/、templates/、Webpack 配置,也不要求本地装 Node.js ——但代价是:你不能再用 buffalo dev 自动编译前端资源,也不能用 Plush 模板渲染 HTML。
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
- 适用场景:微服务后端、CLI 工具配套 API、集成到现有前端体系
- 不加
--api却删掉assets/目录,会导致buffalo dev启动时因找不到node_modules直接 abort -
--api模式下仍保留models/和数据库迁移能力,buffalo db migrate照常可用
生成后必须立刻执行 go mod tidy
buffalo new 写的 go.mod 只声明了顶层依赖,比如 github.com/gobuffalo/buffalo,但没拉取其间接依赖(如 github.com/gobuffalo/pop/v6)。不补全就跑 buffalo dev,大概率在连接数据库或加载中间件时 panic。
- 执行
go mod tidy后,go.sum会变长,go list -m all | grep pop应该能看见 v6 版本 - 如果报
cannot find module providing package,先确认 Go 版本 ≥ 1.21,再检查GOPROXY是否生效(国内建议设为https://goproxy.cn) - 别跳过这步去直接
buffalo dev—— 它不会帮你自动 tidy,也不会友好报错,只会启动失败后退出
database.yml 是摆设,真实连接靠 models.NewDB()
很多人花时间改 database.yml 的 host 或 password,结果发现 buffalo db create 根本不读它。这个文件只是给人看的示例,Buffalo 运行时不解析 YAML,而是靠 models.NewDB() 函数返回的 *pop.Connection 实例来建连。
- 默认实现从环境变量
DB_URL读连接串,格式如postgres://user:pass@localhost:5432/myapp_development?sslmode=disable - 若要改逻辑,得进
models/models.go手动编辑NewDB函数,而不是碰database.yml -
buffalo db create和migrate命令底层调的也是这个函数,所以它们能连上,说明NewDB有效;连不上,问题一定出在环境变量或函数实现里
buffalo dev 启动前必须确保 go mod tidy 成功且 DB_URL 已设好。这两步缺一不可,而它们都不在 buffalo new 的输出提示里。

















