buffalo: command not found 的根本原因是环境链断裂,需依次验证:Go 版本≥1.21、GOPATH 非空且 $GOPATH/bin 已加入 PATH、使用正确安装命令 go install github.com/gobuffalo/cli/cmd/buffalo@latest(旧地址已归档)、Windows 推荐 Scoop 安装。

buffalo 命令报错基本不是代码问题,而是环境链断了——CLI 没装对、Go 版本不匹配、或项目状态没初始化到位。
buffalo: command not found 怎么办
这不是 PATH 没加这么简单,而是整个安装链卡在了前置条件上。
- 先运行
go version:必须 ≥go1.21,低于此版本go install会静默失败或编译出不可执行文件 - 确认
go env GOPATH输出非空;若为空,需手动设置(如export GOPATH=$HOME/go) - 安装命令只能是
go install github.com/gobuffalo/cli/cmd/buffalo@latest,旧地址github.com/gobuffalo/buffalo已归档,会触发 module resolver 错误 - 安装后新开终端,再运行
buffalo version;如果仍报错,检查$GOPATH/bin是否在$PATH中(echo $PATH) - Windows 用户推荐用 Scoop:
scoop bucket add extras && scoop install buffalo,自动处理 PATH 和依赖
buffalo new 后 buffalo dev 直接 panic
生成项目只是起点,buffalo dev 启动前有四件事必须手动补全,缺一不可。
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
- 进项目根目录后立刻执行
go mod tidy:CLI 生成的go.mod不含子依赖(如github.com/gobuffalo/pop/v6),不补全会导致后续buffalo db migratepanic - 必须跑一次
npm install(哪怕你删assets/):否则buffalo dev默认调 Webpack,找不到node_modules就中断 - 确保
config/database.yml中development区块的dialect是小写"postgres"或"mysql",不能写postgresql或sqlite3(后者 Buffalo 官方已移除支持) - 数据库服务(PostgreSQL/MySQL)必须已运行,且
host、port、user、password与本地实例一致;Buffalo 不拉库,只连库
buffalo db migrate 报 unknown dialect "sqlite3"
Buffalo 的 pop v5+ 已彻底移除 SQLite 驱动注册,不是配置写错,是底层缺失。硬配 database.yml 会静默失败或 panic。
- 别试
import _ "github.com/mattn/go-sqlite3":pop 没实现SqliteDialect,导入也没用 - 放弃 pop 迁移和模型层,改用原生
database/sql+github.com/mattn/go-sqlite3手动管理连接 - 删掉
models/下所有 pop 相关代码,注释掉app.Use(popmw.Transaction)等中间件 - 在
actions/app.go中用sql.Open("sqlite3", "./dev.sqlite")初始化,别走models.NewDB() - 迁移脚本自己写 SQL 文件,用
db.Exec()执行,别依赖buffalo db命令
buffalo dev 启动卡住或浏览器打不开
它不会主动报错,但会在几个关键点静默失败,得看终端最后一行输出和实际监听端口。
- 终端最后是否显示类似
Listening on http://127.0.0.1:3001?如果只打印Starting application...就停住,大概率是buffalo db create或buffalo db migrate没执行 - 端口冲突不会提示,而是自动递增尝试(
:3000→:3001),但如果你没注意最后一行,就会以为“没起来” -
public/目录缺失会导致所有/assets/xxx路径 404;手动建空目录或放个public/.keep即可 - 环境变量
DB_URL优先级高于database.yml;开发时配对了database.yml,却忘了清空DB_URL,连接就指向空地址 - 热重载不触发?改
main.go或go.mod不会重启——这些不属于 watcher 监听路径,必须手动重启
真正容易被忽略的是:buffalo 命令的每个环节都强依赖上一步的输出状态,比如 buffalo db migrate 失败后留下的脏 migration 表,会让下一次 buffalo dev 在初始化连接时直接 panic,而不是给出明确错误提示。
















