buffalo db create 仅执行 create database 语句,不验证连接、不读取环境变量、不检查权限;必须配合 buffalo db migrate 才完成建库建表,否则 app.pop() 会 panic。

buffalo db create 是创建数据库的唯一有效命令,但它不会自动连接或初始化模型——必须配合 buffalo db migrate 才算真正就绪。
为什么 buffalo db create 经常“没反应”或报错
它只调用 SQL 的 CREATE DATABASE,不检查配置、不验证连接权限、也不读取 database.yml 以外的环境变量。常见失败点:
-
database.yml中host写成127.0.0.1但本地 PostgreSQL 只监听localhost(或反过来),连接被拒 - 用户没有
CREATEDB权限(PostgreSQL)或CREATE DATABASE权限(MySQL),报permission denied -
BUFFALO_ENV未设或设错,比如在 CI 里跑却默认用development,而该环境 DB 配置缺失 - 用
--api创建的项目,database.yml里dialect是空的,需手动填postgres或mysql
buffalo db create 和 buffalo db migrate 必须成对使用
前者建库,后者建表——漏掉任一环节,后续所有 app.Pop() 操作都会 panic。
-
buffalo db create成功后,数据库是空的,连schema_migrations表都没有 -
buffalo db migrate会自动创建schema_migrations表,并执行models/migrations/下所有未标记的迁移文件 - 如果迁移失败(比如字段名重复),
buffalo db migrate会停住,且不会回滚已执行的语句;得手动进 psql/mysql 清理再重试 - 想重来?先
buffalo db drop(仅限开发),再create+migrate
调试连接问题时,优先看这三处输出
别猜,直接查日志和配置:
- 运行
buffalo db create -v(加-v),它会打印最终拼出的连接串,确认user、host、port是否符合预期 - 检查
config/database.yml对应环境(如development:)下,url字段是否为空;若填了url,其他字段(user、password)会被忽略 - 临时用
psql -U your_user -h localhost -d postgres手动连一次,验证账号和网络是否通——这是最可靠的兜底手段
buffalo db create 就是个薄包装,背后完全依赖你的数据库服务状态和配置精度。它不帮你修权限、不自动 fallback、也不提示“你可能忘了配 host”,容易卡在 silent fail 上。











