无法在Heroku上部署带有Godeps依赖的Go应用程序。

huangapple go评论82阅读模式
英文:

Unable to deploy go app with Godeps dependencies on Heroku

问题

当我尝试将项目推送到Heroku时,出现了以下错误:

git push heroku master
Counting objects: 88, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (86/86), done.
Writing objects: 100% (88/88), 18.85 MiB | 686.00 KiB/s, done.
Total 88 (delta 13), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Go app detected
remote: -----> Checking Godeps/Godeps.json file.
remote: -----> Using go1.7.3
remote: -----> Running: go install -v -tags heroku ./...
remote: main.go:8:2: cannot find package "github.com/Sirupsen/logrus" in any of:
remote:         /app/tmp/cache/go1.7.3/go/src/github.com/Sirupsen/logrus (from $GOROOT)
remote:         /tmp/tmp.Ffkjp5c5US/.go/src/github.com/Sirupsen/logrus (from $GOPATH)
remote: main.go:6:2: cannot find package "github.com/gin-gonic/gin" in any of:
remote:         /app/tmp/cache/go1.7.3/go/src/github.com/gin-gonic/gin (from $GOROOT)
remote:         /tmp/tmp.Ffkjp5c5US/.go/src/github.com/gin-gonic/gin (from $GOPATH)
remote:  !     Push rejected, failed to compile Go app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !       Push rejected to eerie-wizard-18479.
remote:
To https://git.heroku.com/eerie-wizard-18479.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/eerie-wizard-18479.git'

在提交和推送到Heroku之前,我仔细执行了godep save ./...命令,这是我的Godeps.json文件(其中包含logrus和gin):

{
    "ImportPath": "github.com/sbouaked/neo-fundations",
    "GoVersion": "go1.7",
    "GodepVersion": "v74",
    "Packages": [
        "./..."
    ],
    "Deps": [
        {
            "ImportPath": "github.com/Sirupsen/logrus",
            "Comment": "v0.10.0-38-g3ec0642",
            "Rev": "3ec0642a7fb6488f65b06f9040adc67e3990296a"
        },
        {
            "ImportPath": "github.com/gin-gonic/gin",
            "Comment": "v1.0-2-g3900df0",
            "Rev": "3900df04d2a88e22beaf6a2970c63648b9e1b0e1"
        },
        ...
    ]
}

我在这篇帖子上看到,我需要提交vendor/目录,但我不想这样做。现在真的有解决这个问题的方法吗?

英文:

I have the following error when i'm trying to push my project on heroku

git push heroku master
Counting objects: 88, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (86/86), done.
Writing objects: 100% (88/88), 18.85 MiB | 686.00 KiB/s, done.
Total 88 (delta 13), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Go app detected
remote: -----> Checking Godeps/Godeps.json file.
remote: -----> Using go1.7.3
remote: -----> Running: go install -v -tags heroku ./...
remote: main.go:8:2: cannot find package "github.com/Sirupsen/logrus" in any of:
remote:         /app/tmp/cache/go1.7.3/go/src/github.com/Sirupsen/logrus (from $GOROOT)
remote:         /tmp/tmp.Ffkjp5c5US/.go/src/github.com/Sirupsen/logrus (from $GOPATH)
remote: main.go:6:2: cannot find package "github.com/gin-gonic/gin" in any of:
remote:         /app/tmp/cache/go1.7.3/go/src/github.com/gin-gonic/gin (from $GOROOT)
remote:         /tmp/tmp.Ffkjp5c5US/.go/src/github.com/gin-gonic/gin (from $GOPATH)
remote:  !     Push rejected, failed to compile Go app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !       Push rejected to eerie-wizard-18479.
remote:
To https://git.heroku.com/eerie-wizard-18479.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/eerie-wizard-18479.git'

I carefully made a godep save ./... before commiting and pushing on heroku, this is my Godeps.json file: (logrus and gin are present in this file)

{
	"ImportPath": "github.com/sbouaked/neo-fundations",
	"GoVersion": "go1.7",
	"GodepVersion": "v74",
	"Packages": [
		"./..."
	],
	"Deps": [
		{
			"ImportPath": "github.com/Sirupsen/logrus",
			"Comment": "v0.10.0-38-g3ec0642",
			"Rev": "3ec0642a7fb6488f65b06f9040adc67e3990296a"
		},
		{
			"ImportPath": "github.com/gin-gonic/gin",
			"Comment": "v1.0-2-g3900df0",
			"Rev": "3900df04d2a88e22beaf6a2970c63648b9e1b0e1"
		},
		{
			"ImportPath": "github.com/gin-gonic/gin/binding",
			"Comment": "v1.0-2-g3900df0",
			"Rev": "3900df04d2a88e22beaf6a2970c63648b9e1b0e1"
		},
		{
			"ImportPath": "github.com/gin-gonic/gin/render",
			"Comment": "v1.0-2-g3900df0",
			"Rev": "3900df04d2a88e22beaf6a2970c63648b9e1b0e1"
		},
		{
			"ImportPath": "github.com/golang/protobuf/proto",
			"Rev": "98fa357170587e470c5f27d3c3ea0947b71eb455"
		},
		{
			"ImportPath": "github.com/manucorporat/sse",
			"Rev": "ee05b128a739a0fb76c7ebd3ae4810c1de808d6d"
		},
		{
			"ImportPath": "golang.org/x/net/context",
			"Rev": "4bb47a1098b37d69980d96237e2ae4ff56bb5a95"
		},
		{
			"ImportPath": "golang.org/x/sys/unix",
			"Rev": "c200b10b5d5e122be351b67af224adc6128af5bf"
		},
		{
			"ImportPath": "gopkg.in/go-playground/validator.v8",
			"Comment": "v8.18.1",
			"Rev": "5f57d2222ad794d0dffb07e664ea05e2ee07d60c"
		},
		{
			"ImportPath": "gopkg.in/yaml.v2",
			"Rev": "a5b47d31c556af34a302ce5d659e6fea44d90de0"
		}
	]
}

I saw on this post that I have to commit vendor/, but I didn't want to. There is really any solutions for this now ?

答案1

得分: 2

如果你查看Heroku的Go构建包(https://github.com/heroku/heroku-buildpack-go/blob/master/bin/compile),你会发现它目前不支持GoDeps,因为传统的GoDeps风格的依赖管理已经在Go v1.6中被弃用。你可以将GoDeps依赖转换为vendored依赖,这样就可以解决这个问题。

我个人推荐使用glide:https://github.com/Masterminds/glide

但你也可以使用:

https://github.com/kardianos/govendor

或者

https://github.com/constabulary/gb

因为这些在构建包的编译脚本中都得到了支持。

每个工具都支持将GoDeps自动转换为它们的格式。

如果你有./vendor/vendor.json文件,Heroku将自动使用govendor,除非你配置Heroku使用其他工具。

这个页面也许会有所帮助:https://elements.heroku.com/buildpacks/heroku/heroku-buildpack-go

从技术上讲,它确实支持Godep,但似乎你要么使用较旧版本的Go,要么将GoDeps移到vendor目录中。

英文:

If you look at the heroku buildpack for Go (https://github.com/heroku/heroku-buildpack-go/blob/master/bin/compile), it does not currently support GoDeps, as traditional GoDeps style dependency management has been deprecated as Go v1.6. You can convert your GoDeps dependencies to a vendored dependency and that should fix that.

I personally recommend using glide: https://github.com/Masterminds/glide

But you can also use:

https://github.com/kardianos/govendor

or

https://github.com/constabulary/gb

As those are supported in the compile script for the buildpack.

Each of those support an automated conversion of GoDeps to their formats.

If you have ./vendor/vendor.json Heroku will automatically use govendor, unless you configure Heroku to use something otherwise.

This page may help as well https://elements.heroku.com/buildpacks/heroku/heroku-buildpack-go

It does support Godep, technically, but it would seem you have to either use an older version of Go or move GoDeps to vendor.

huangapple
  • 本文由 发表于 2016年11月2日 17:49:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/40376830.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定