buffalo dev 启动前必须依次执行 go mod tidy、npm install、buffalo db create 与 migrate,缺一将导致 panic 或 404;它依赖完整前置状态,非“运行就完事”,且 buffalo.dev.yml 修改需重启才生效。

buffalo dev 不是“运行就完事”的命令,它依赖前置状态完整;跳过 go mod tidy、npm install 或数据库初始化,必然 panic 退出或页面 404。
buffalo dev 启动前必须跑的三步命令
终端输出 “Starting application…” 并不表示服务可用——它只代表进程没立刻崩溃。真正能访问的前提是:
-
go mod tidy:Buffalo 生成的go.mod只声明顶层依赖,像github.com/gobuffalo/pop/v6这类 ORM 子依赖必须显式拉取,否则buffalo db migrate会直接 panic -
npm install(或yarn install):即使你删了assets/,首次启动仍需该步骤——buffalo dev默认调用 Webpack Dev Server,找不到node_modules就中断,不给你机会删 -
buffalo db create+buffalo db migrate:缺任一都会导致models.NewDB()连接后查表失败,报table not found;注意buffalo db create成功才有created database myapp_development输出,不是静默成功
buffalo dev 报错但浏览器打不开的常见原因
终端卡在 “Starting application…” 或闪退,大概率是以下其一:
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
- 端口被占:
buffalo dev遇到:3000占用会自动试:3001,但它不会跳过,也不会提示“已换端口”——最后一行输出的实际地址才是真实访问地址,务必看清楚 -
public/目录缺失:Buffalo 默认启用packr2打包静态资源,若该目录不存在或为空,所有/assets/xxx.css请求必 404;可手动建空目录或放个public/.keep - 数据库配置看似对,实则无效:
config/database.yml仅作参考,运行时连接由models.NewDB()决定,它优先读环境变量DB_URL;开发时配对了database.yml,还得确认DB_URL没被 CI 脚本、shell profile 或.env文件意外覆盖
buffalo.dev.yml 修改后为什么没生效
这个 YAML 文件控制开发服务器行为,但它的改动**不会热重载**——必须手动重启 buffalo dev:
- 改了
port: 4000却还在访问:3000?服务根本没重启 - 启用了
https: true但没配cert_file和key_file?启动会失败,错误藏在日志末尾,容易忽略 - 代理配置写成
proxy: http://localhost:8080(少了个冒号)?buffalo dev直接 panic,报错是yaml: unmarshal errors
buffalo dev 启动后 JS/CSS 不更新怎么办
Buffalo 开发模式下前端资源靠 Webpack 实时构建,不是直接读文件:
- 改了
assets/js/app.js后,必须等终端里出现Compiled successfully才刷新页面;Webpack watcher 有时会卡死,此时先kill -9 $(pgrep -f 'webpack'),再重启buffalo dev -
assets/css/application.css里引入其他 CSS,要用@import "xxx.css",不能用require("xxx.css")——后者是 Webpack 语法,但 Buffalo 默认配置不处理它 - 模板里引用路径必须用
assetPath("js/app.js"),硬写/public/js/app.js在生产环境必 404,因为打包后路径被 hash 重命名
最常被忽略的一点:buffalo dev 的行为不取决于 main.go 或 database.yml,而取决于 actions.App() 返回的 app 实例、models.NewDB() 的连接逻辑,以及 buffalo.dev.yml 的实际加载结果——任何想绕过这些去“魔改启动流程”的尝试,都会在迁移、测试或部署阶段暴露出来。

















