I want to deploy Go application on Heroku, but I got an error like this:
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)
It works on my local environment and I added dependencies to Godeps/Godeps.json
with godeps save
command. What's the problem? I noticed official go-getting-started repo has vendor
folder, so does it mean I have to have all dependencies into my repository?
This is my 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"
}
]
}
Yes, You do need to have all dependencies into your repository.
In fact when you run godep save ./...
and you are using go 1.5 or greater, Godep will automatically put dependencies in a directory named vendor
(inside root directory of your repo). You need to commit both Godep and vendor directory to your repository.
On side note while adding vendor directory use -f flag to add all files in it. It is needed as some files/directory might not be committed depending on your gitignore file and that will cause build failure in heroku. As a standard practice you can exeute following command to after adding dependencies using godep.
git add -f vendor/ Godep/
git commit -a -m "Vendorizing dependencies"