revel 应用不可直接 go run 启动,必须通过 revel package 构建部署目录,再在其中执行 go build;生产环境需严格设置 revel_import_path(与 app.conf 中 app.importpath 完全一致)和 revel_runmode=prod 才能正常启动。

Revel 应用不能直接 go run main.go 启动,打包后也不是标准 Go 二进制——它依赖运行时解析 app.importPath 和项目结构,必须走 Revel 自己的生命周期管理。
revel package 生成的是可部署结构,不是单个可执行文件
执行 revel package myapp 后,输出目录(如 dist/myapp)包含:main.go、conf/、app/、views/、public/ 等完整结构。这个目录本身就是一个“部署单元”,不是编译产物。
-
main.go是 Revel 的启动引导器,内含硬编码的importPath,由app.conf中的app.importPath决定,不可手动修改路径 - 打包过程不编译二进制,只做资源归集;真正编译需在目标环境执行
go build -o myapp .(在dist/myapp目录下) - 若跳过
revel package直接go build原项目根目录,会因缺少conf/app.conf解析上下文而报Failed to import with error: import"": invalid import path
生产环境必须设置 REVEL_IMPORT_PATH 和 REVEL_RUNMODE=prod
编译后的二进制(如 myapp)启动时,Revel 不再读取当前路径,而是严格依赖环境变量定位应用源码位置。否则仍会触发空导入路径错误。
-
REVEL_IMPORT_PATH必须与conf/app.conf中的app.importPath完全一致(包括大小写、斜杠方向),例如github.com/yourname/myapp -
REVEL_RUNMODE=prod强制关闭开发模式(禁用热重载、模板自动编译等),否则启动失败或暴露调试接口 - Linux 示例启动命令:
REVEL_IMPORT_PATH=github.com/yourname/myapp REVEL_RUNMODE=prod ./myapp -port=8089 -addr=127.0.0.1
- Windows 批处理中需用
set分行设置,且注意路径分隔符统一用/(Revel 内部用filepath.FromSlash处理)
Nginx 反向代理必须转发 Host 和 X-Forwarded-* 头
Revel 默认生成的 URL(如重定向、静态资源链接)依赖 Host 请求头构造。若 Nginx 不透传,页面会加载 http://127.0.0.1:8089/xxx 这类地址,导致 404 或混合内容警告。
- 在
location /块中必须显式添加:proxy_set_header Host $host;<br>proxy_set_header X-Real-IP $remote_addr;<br>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>proxy_set_header X-Forwarded-Proto $scheme;
- 如果站点启用了 HTTPS,还需在 Revel 配置中设
app.secure = true,否则Redirect仍会跳转到http:// - 静态资源(
public/下)建议由 Nginx 直接服务,避免经 Revel 走 Go HTTP 处理器:添加location ^~ /public/ { alias /path/to/dist/myapp/public/; }
最容易被忽略的是 app.importPath 与 REVEL_IMPORT_PATH 的镜像一致性——差一个字符、多一个斜杠、大小写不匹配,都会让 Revel 在启动瞬间失败,且错误日志只显示空导入路径,不提示具体比对值。











