我正在用Go编写一个webapp,它使用Postgres进行数据存储,并部署在Heroku上。如何自动运行迁移?
我使用Go 1.13,对于依赖管理,我想使用Go模块。
作为一个迁移工具,我尝试了这个https://github.com/golang-migrate/migrate。在本地,我刚刚从github版本下载了最新的二进制文件,并运行了CLI实用程序./migrate -database $DATABASE_URL -path migrations up。
Heroku Procfile内容
release: migrate -database $DATABASE_URL -path migrations up
web: bin/myawesomegoapp当然,当我启动git push heroku master时,我得到一个错误,“迁移”没有这样的文件或目录,释放命令失败,推送被拒绝。
那么,我如何设置项目来安装migrate命令,以便能够在每个版本上运行它?
发布于 2020-05-22 02:21:43
你必须告诉Heroku去构建它,这是一件很痛苦的事情。下面是如何使用go模块实现这一点。
首先,你必须告诉go模块包括它,即使它在源代码中没有被引用。这是在here中讨论的。这是我的工具包,它位于项目根目录下的tools.go中:
// +build tools
package tools
// See this https://github.com/go-modules-by-example/index/blob/master/010_tools/README.md
import (
_ "github.com/golang-migrate/migrate/v4"
_ "github.com/golang-migrate/migrate/v4/cmd/migrate"
)然后,我提供了我的依赖项。
go mod tidy
go mod vendor最后,您必须告诉Heroku为migrate构建二进制文件,即not documented very thoroughly。为此,您不仅需要指定迁移所在的路径,还需要包括一个".“这告诉heroku您还需要在工作目录中查找main包。这是因为(我猜)使用该指令会覆盖他们默认的包搜索行为。下面是我的模块文件的样子:
module ...
// +heroku goVersion 1.14
// +heroku install -tags 'postgres' ./vendor/github.com/golang-migrate/migrate/v4/cmd/migrate .
go 1.14
require (
...https://stackoverflow.com/questions/58250793
复制相似问题