首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在heroku上运行Go迁移?

如何在heroku上运行Go迁移?
EN

Stack Overflow用户
提问于 2019-10-06 01:39:17
回答 1查看 652关注 0票数 6

我正在用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内容

代码语言:javascript
复制
release: migrate -database $DATABASE_URL -path migrations up
web: bin/myawesomegoapp

当然,当我启动git push heroku master时,我得到一个错误,“迁移”没有这样的文件或目录,释放命令失败,推送被拒绝。

那么,我如何设置项目来安装migrate命令,以便能够在每个版本上运行它?

EN

回答 1

Stack Overflow用户

发布于 2020-05-22 02:21:43

你必须告诉Heroku去构建它,这是一件很痛苦的事情。下面是如何使用go模块实现这一点。

首先,你必须告诉go模块包括它,即使它在源代码中没有被引用。这是在here中讨论的。这是我的工具包,它位于项目根目录下的tools.go中:

代码语言:javascript
复制
// +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"
)

然后,我提供了我的依赖项。

代码语言:javascript
复制
go mod tidy
go mod vendor

最后,您必须告诉Heroku为migrate构建二进制文件,即not documented very thoroughly。为此,您不仅需要指定迁移所在的路径,还需要包括一个".“这告诉heroku您还需要在工作目录中查找main包。这是因为(我猜)使用该指令会覆盖他们默认的包搜索行为。下面是我的模块文件的样子:

代码语言:javascript
复制
module ...

// +heroku goVersion 1.14
// +heroku install -tags 'postgres' ./vendor/github.com/golang-migrate/migrate/v4/cmd/migrate .

go 1.14

require (
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58250793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档