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

当我为数据库迁移构建自动化脚本时,我遇到了一个非常奇怪的问题。我按照官方文档:


预/后编译钩子


如果文件 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 hook

remote: app_uri: 

remote: database_url: ?sslmode=require

remote: panic: runtime error: invalid memory address or nil pointer dereference

remote: [signal SIGSEGV: segmentation violation code=0x1 addr=0x58 pc=0x503b06]

remote: 

go-post-compile似乎该进程在运行脚本时无法获取环境变量。


在 buildpack 编译应用程序后,该过程与 config vars 配合得很好。


那么你有什么想法吗?


繁星coding
浏览 136回答 1
1回答

慕码人2483693

经过一番研究,我找到了运行数据库迁移自动化的解决方案。release phase开发人员应该在 Heroku中运行这些类型的命令。可以查看官方文档:https ://devcenter.heroku.com/articles/release-phase
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go