Revel框架升级需彻底卸载旧CLI、清理模块缓存、更新go.mod依赖至v1.1.0并迁移路由至app/init.go,否则会因版本错配导致“not found in GOPATH”或404错误。

Revel 框架不能靠 go install 覆盖重装就“干净”,残留的 CLI 工具版本、go.mod 中旧依赖、本地缓存和项目级初始化逻辑会互相干扰,导致 revel run 报错“not found in GOPATH”或路由 404——这不是重装失败,是卸载没清底。
先删 CLI 工具二进制和模块缓存
Revel CLI 是独立发布的命令行程序,不随框架更新自动替换。旧版 CLI(如 v0.24)会错误解析 v1.1.0 项目的 app/init.go,跳过路由注册。
- 运行
which revel确认当前 CLI 路径,常见位置:$GOPATH/bin/revel或$HOME/go/bin/revel - 直接删除该文件:
rm $(which revel) - 清理 Go 模块缓存:
go clean -modcache(避免go mod download复用旧版 revel 包) - 验证是否清空:
revel version应报 command not found
检查并重置项目级依赖与初始化
旧项目里 go.mod 锁定的是 github.com/revel/revel v0.19.0 或 v1.0.0,而新 CLI 要求框架至少为 v1.1.0;同时 routes.conf 已被废弃,必须迁移到 app/init.go。
- 打开项目根目录的
go.mod,将 revel 行改为:github.com/revel/revel v1.1.0 - 运行
go mod tidy—— 若报错 “require github.com/revel/revel: version >>v1.1.0git stash - 确认
app/init.go中存在revel.Router.AddRoute或revel.InterceptFunc调用;若只有routes.conf,需手动迁移路由定义 - 删除
conf/routes目录(如果存在),它在 v1.1.0 后已完全失效
重建全新 Revel 项目验证环境
不建议在旧项目上硬升级,尤其当 app/controllers 下控制器方法命名不规范(如小写首字母)、或混入了业务逻辑时,热重载和依赖注入大概率中断。
- 新建空目录:
mkdir ~/tmp-revel-test && cd $_ - 执行
revel new myapp—— 此时 CLI 会基于当前最新版生成标准结构 - 启动验证:
revel run myapp,访问http://localhost:9000应见 Revel 默认欢迎页 - 对比新旧项目中
app/init.go的revel.Run()调用位置、app/conf/app.conf的app.name和run.mode值是否一致
最易被忽略的是 revel build 生成的可执行文件残留:旧版构建产物(如 target/myapp)可能仍链接着 v0.19.0 的 runtime,即使 CLI 和 go.mod 都更新了,直接运行它也会 panic。重装后首次部署务必用 revel build -a . -t ./fresh-target 全量重建。











