Buffalo 不自动读取 database.yml,必须设置 DATABASE_URL 和 GO_ENV 环境变量;仅支持 Go 1.23.x/1.24.x;Windows 需禁用 GOPATH;初始化项目需在空目录运行 buffalo new myapp --api;DATABASE_URL 格式须匹配数据库类型。

Buffalo 不会自动读取 database.yml,安装后必须手动配置 DATABASE_URL 环境变量才能连上数据库。
确认 Go 版本和系统兼容性
Buffalo 只支持 go1.23.x 和 go1.24.x。运行 go version 验证输出是否匹配;若为 go1.22 或 go1.25,启动或迁移时大概率 panic 或静默失败。Windows 用户需确保未启用 GOPATH 模式——Buffalo 强制使用 Go modules,否则 buffalo dev 和 buffalo db migrate 全部失效。
安装 CLI 并初始化项目
推荐用 go install 安装(需本地有 gcc 编译 sqlite3 驱动):
go install github.com/gobuffalo/cli/cmd/buffalo@latest
然后在空目录下执行:
buffalo new myapp --api
加 --api 可跳过前端模板和 asset 构建,适合纯后端服务。注意:buffalo new 必须在空目录运行,否则直接退出。
设置 DATABASE_URL 而不是改 database.yml
config/database.yml 是个占位文件,Buffalo 运行时不解析它。真正起作用的是 models/models.go 中 NewDB() 函数传入的 URL,通常来自 os.Getenv("DATABASE_URL")。
- 检查环境变量是否生效:
echo $DATABASE_URL—— 若为空,buffalo dev会因空字符串构造连接而报错 - PostgreSQL 示例:
export DATABASE_URL="postgres://user:pass@localhost:5432/myapp_development?sslmode=disable" - MySQL 示例:
export DATABASE_URL="mysql://user:pass@127.0.0.1:3306/myapp_development?parseTime=true" - 导出后务必验证:
buffalo task db:ping或pop ping -e development(需先go install github.com/gobuffalo/pop/v6/cmd/pop@latest)
GO_ENV 必须显式导出,不能靠 .env 文件
Buffalo 不自动加载 .env,GO_ENV 必须在 shell 中提前导出,否则 app.Env 默认为 "development",但 models.NewDB() 可能误读成 production 块(如果代码里硬编码了逻辑分支)。
- 运行
echo $GO_ENV,若为空,立即执行export GO_ENV=development -
GO_ENV值必须与你期望使用的配置逻辑一致,比如models.NewDB()内部是否根据该值拼接 URL 或查表 - 不要把密码写进
database.yml或.env——这些文件极易被误提交;敏感字段应由系统级环境变量或密钥服务提供
最容易被忽略的是:即使 DATABASE_URL 正确,GO_ENV 错配也会导致 models.NewDB() 返回 nil 或静默使用错误连接参数。调试时优先验证这两个变量是否同时存在且值合理,而不是去改 YAML 文件。


















