当我为数据库迁移构建自动化脚本时,我遇到了一个非常奇怪的问题。我按照官方文档:预/后编译钩子如果文件 bin/go-pre-compile 或 bin/go-post-compile 存在并且可执行,那么它将在 repo 编译之前(go-pre-compile)或编译之后(go-post-compile)执行)。因为 buildpack 将编译后的可执行文件安装到 bin 中,所以 go-post-compile 钩子可以在 go 中编写,如果它是由指定的(见上文)安装的。然后我制作了go-post-compile下面的脚本:var ( appURI := os.Getenv("APP_URI") databaseURL := os.Getenv("DATABASE_URL"))func main() { fmt.Printf("app_uri: %s\n", appURI) fmt.Printf("database_url: %s\n", databaseURL) sourcePath := fmt.Sprintf("file://%s/db/migrations", appURI) m, err := migrate.New(sourcePath, databaseURL) if err != nil { logger.Error("Failed to establish the connection of the migration.", err) } err = m.Up() if err != nil && err.Error() == "no change" { fmt.Println(" > NOTE: There is no change related to the operation of the migration.") return } else if err != nil { logger.Error("Failed to establish the connection of the migration.", err) } fmt.Println(" > Done.")}当我将代码推送到heroku时,出现以下错误:remote: -----> Running bin/go-post-compile hookremote: app_uri: remote: database_url: ?sslmode=requireremote: panic: runtime error: invalid memory address or nil pointer dereferenceremote: [signal SIGSEGV: segmentation violation code=0x1 addr=0x58 pc=0x503b06]remote: go-post-compile似乎该进程在运行脚本时无法获取环境变量。在 buildpack 编译应用程序后,该过程与 config vars 配合得很好。那么你有什么想法吗?
1 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
经过一番研究,我找到了运行数据库迁移自动化的解决方案。release phase
开发人员应该在 Heroku中运行这些类型的命令。可以查看官方文档:https ://devcenter.heroku.com/articles/release-phase
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消