必须先安装Buffalo CLI并配置PATH,再按go mod tidy→buffalo db create→buffalo db migrate顺序执行,最后运行buffalo dev;database.yml仅用于db命令,运行时实际依赖DATABASE_URL环境变量。

必须先装好 Buffalo CLI,再初始化项目、配 database.yml、跑迁移——缺任何一环,buffalo dev 都会直接失败或连不上数据库。
buffalo CLI 安装失败的常见原因和绕过方法
报 command not found 不是 Buffalo 没装上,而是 $GOPATH/bin 没进系统 PATH。执行 go env GOPATH 看路径,再确认该路径下是否存在 buffalo 文件;若存在,就把 $GOPATH/bin 加进 shell 的 PATH(如 macOS 的 ~/.zshrc)。
用 go install github.com/gobuffalo/cli/cmd/buffalo@latest 报 cannot find module providing package,大概率是 Go 版本低于 1.21 或 GitHub 访问受限。此时别硬扛,改用预编译包:
- Linux/macOS:下载
buffalo_*.tar.gz,解压后把buffalo二进制丢进/usr/local/bin/,再chmod +x - Windows:用
scoop install buffalo(scoop bucket add extras先执行)
装完务必新开终端,运行 buffalo version 验证——输出类似 v0.18.13 才算真正就位。
database.yml 配错导致 buffalo db create 直接拒绝连接
database.yml 是给人看的,Buffalo 运行时不读它;但它却是 buffalo pop create -a 和 buffalo db migrate 唯一依赖的配置文件。填错一个字段,整个数据库链路就断了。
PostgreSQL 用户注意:dialect: "postgres" 必须小写且拼成 postgres,写成 postgresql 或 pg 会触发 unknown dialect 错误。
MySQL 用户注意:host 写 127.0.0.1,别写 localhost,否则可能走 Unix socket 而非 TCP,连不上。
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
填完别急着跑命令,先手动验证数据库服务是否真在监听:
-
ps aux | grep postgres(或systemctl status mysql)确认进程活着 -
telnet localhost 5432(或3306)确认端口通
第一次运行项目必须按顺序执行三步
Buffalo 不会帮你自动拉依赖、建库、跑迁移——这些都得你亲手敲命令,而且顺序不能乱:
- 先
go mod tidy:补全go.mod里没声明但实际需要的子依赖,比如github.com/gobuffalo/pop/v6,漏这步后续buffalo db会 panic - 再
buffalo db create:基于database.yml创建空数据库;如果提示permission denied,说明当前用户没建库权限,得用postgres或root账号手动CREATE DATABASE - 最后
buffalo db migrate:应用所有未执行的 migration 文件;跳过这步,models.User查询时会报table users does not exist
做完这三步,再跑 buffalo dev,才可能看到 Starting application at http://127.0.0.1:3000。
buffalo dev 启动失败却没报错?先看终端输出的实际地址
buffalo dev 默认绑定 :3000,但端口被占时它不会报错退出,而是自动递增到 :3001、:3002……并打印新地址。很多人只盯着 localhost:3000 刷新,根本没留意终端最后一行写的其实是 http://127.0.0.1:3002。
热重载还可能静默失效:改了 actions/home.go 没反应,先检查 buffalo.dev.yml 缩进是不是两个空格(多一个少一个 YAML 解析就失败,退回到默认监听行为);再确认有没有 app.Use(session.Middleware()) 这类中间件注册在 app.Serve() 之前——顺序错会导致整个中间件链不生效,连带热加载逻辑卡住。
database.yml 里写的配置,只用于 buffalo db 系列命令;真实运行时数据库连接靠的是 models.NewDB(),通常读环境变量 DB_URL。这点容易混淆,改完 database.yml 却发现 buffalo dev 还是连不上,八成是 DB_URL 没设或设错了。

















