4

我想在 Heroku 上部署 Go 应用程序,但出现如下错误:

remote: -----> Go app detected
remote: -----> Checking Godeps/Godeps.json file.
remote: -----> Using go1.6.3
remote:  !!    Installing package '.' (default)
remote:  !!    
remote:  !!    
remote: -----> Running: go install -v -tags heroku . 
remote: main.go:9:2: cannot find package "github.com/go-martini/martini" in any of:
remote:     /app/tmp/cache/go1.6.3/go/src/github.com/go-martini/martini (from $GOROOT)
remote:     /tmp/build_3c0222e075a91a3363e590a0169d6fb6/.heroku/go/src/github.com/go-martini/martini (from $GOPATH)

Godeps/Godeps.json它适用于我的本地环境,我使用godeps save命令添加了依赖项。有什么问题?我注意到官方go-getting-started repo 有vendor文件夹,这是否意味着我必须将所有依赖项都放入我的存储库中?

这是我的Godeps/Godeps.json

{
    "ImportPath": "github.com/mikamikuh/oauth2-server-tester",
    "GoVersion": "go1.6",
    "GodepVersion": "v74",
    "Deps": [
        {
            "ImportPath": "github.com/codegangsta/inject",
            "Comment": "v1.0-rc1-10-g33e0aa1",
            "Rev": "33e0aa1cb7c019ccc3fbe049a8262a6403d30504"
        },
        {
            "ImportPath": "github.com/go-martini/martini",
            "Comment": "v1.0-185-gc257c41",
            "Rev": "c257c412d547ac70fcaf5596c1a50a7cb832c1fc"
        }
    ]
}
4

1 回答 1

4

是的,您确实需要将所有依赖项都放入您的存储库中。

事实上,当你运行godep save ./...并使用 go 1.5 或更高版本时,Godep 会自动将依赖项放在一个名为vendor(在你的 repo 的根目录内)的目录中。您需要将 Godep 和供应商目录都提交到您的存储库。

在添加供应商目录时使用 -f 标志在其中添加所有文件。它是必需的,因为根据您的 gitignore 文件可能不会提交某些文件/目录,这将导致 heroku 中的构建失败。作为标准做法,您可以在使用 godep 添加依赖项后执行以下命令。

git add -f 供应商/ Godep/

git commit -a -m “供应依赖”

于 2016-08-14T08:30:48.307 回答