为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Heroku 中获取 golang-buildpack 的钩子脚本中的环境变量?

如何在 Heroku 中获取 golang-buildpack 的钩子脚本中的环境变量?

Go
繁星coding 2022-06-13 15:36:20
当我为数据库迁移构建自动化脚本时,我遇到了一个非常奇怪的问题。我按照官方文档:预/后编译钩子如果文件 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


查看完整回答
反对 回复 2022-06-13
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信