必须显式设go_env=development buffalo dev才进开发模式,否则跳过热重载、日志不输出sql、db_url失效回退database.yml;go_env须命令前导出,.env不生效,且进程启动后修改无效。

buffalo dev 启动前必须显式设 GO_ENV=development,否则它根本不会进开发模式——这不是可选配置,而是运行时硬开关。设错、漏设或设晚了,都会导致中间件跳过热重载、日志不输出 SQL、数据库连接从 DB_URL 回退到 database.yml(甚至失败)。
GO_ENV 必须在命令执行前导出,不能靠 .env 文件自动加载
Buffalo 不读 .env 文件,GO_ENV=development buffalo dev 是唯一可靠写法。常见错误:
- 写成
export GO_ENV=development && buffalo dev:Bash 中&&会新开子 shell,变量不传入 buffalo 进程 - 只在终端里敲
export GO_ENV=development,然后另起一行敲buffalo dev:多数 shell 不会把 export 持久透传给后续命令,尤其在 zsh 或某些 IDE 内置终端里 - 以为
buffalo dev --env=development有效:该 flag 不存在,buffalo dev 不接受 --env 参数
验证是否真进了 development 模式
别信终端输出,直接看日志或代码行为:
Buffalo框架 1.0.1 版本源码包下载,适合需要错误处理改进、依赖更新、render.Download 注释和 request logger 调整的 v1 项目。
- 启动后终端第一行应含
INFO 2026/10/08 ... environment: development - 改
actions/home.go后,buffalo dev 应立刻打印restarting...并 reload;如果没反应,大概率app.Env是空字符串或test - 在
actions/app.go的app.New()返回后加一行:log.Printf("real env: %s", app.Env),启动时看输出
database.yml 配置在 development 下几乎无效
开发时真正起作用的是环境变量 DB_URL,不是 config/database.yml。即使你把 database.yml 配得再准,只要 DB_URL 存在(比如被 CI 脚本或 IDE 自动注入),models.NewDB() 就会优先用它,database.yml 彻底被跳过。
- 本地开发建议删掉
database.yml里的development区块,只留test和production,避免干扰 - 统一用
DB_URL=postgres://localhost:5432/myapp_development?sslmode=disable启动,比维护 YAML 更可靠 - 执行
buffalo db create和buffalo db migrate前,也得确保DB_URL已设好,否则它们连的可能是别的库
最容易被忽略的一点:GO_ENV 不是 Buffalo 自己解析的,而是由 github.com/gobuffalo/env 包在进程启动极早期读取的。一旦 buffalo 进程起来,再改环境变量毫无意义——哪怕你 kill -USR1 重启,也不会重新读取。










