使用本地软件包在Heroku上运行应用程序

时间:2014-09-27 16:43:48

标签: heroku go buildpack

我试图使用Go Buildpack在Heroku上放置一个Go应用程序,当它是基本的东西时这很好,但是一旦我执行本地程序包就不能编译。以下是一个示例设置:

结构

+ship
  +foo  
    foo.go
  main.go

main.go

package main

import (
  "os"
  "fmt"
  "net/http"
  "ship/foo"
)

func main() {
  foo.Bar()
  port := os.Getenv("PORT")
  http.HandleFunc("/", root)
  http.ListenAndServe(":" + port, nil)
}

func root(w http.ResponseWriter, r *http.Request) {
  fmt.Fprint(w, "Aloha, world!")
}

foo.go

package foo

func Bar() {}

git push heroku master
Initializing repository, done.
Counting objects: 20, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (20/20), 1.53 MiB | 586.00 KiB/s, done.
Total 20 (delta 2), reused 0 (delta 0)

-----> Fetching custom git buildpack... done
-----> Go app detected
-----> Installing go1.3.1... done
-----> Running: godep go install -tags heroku ./...
main.go:7:3: cannot find package "ship/foo" in any of:
    /app/tmp/cache/go1.3.1/go/src/pkg/ship/foo (from $GOROOT)
    /tmp/build_4b92e51c-3959-4ddb-8eff-90d72da70729/.heroku/g/src/_/Users/Daryl/Go/src/ship/Godeps/_workspace/src/ship/foo (from $GOPATH)
    /tmp/build_4b92e51c-3959-4ddb-8eff-90d72da70729/.heroku/g/src/ship/foo
godep: go exit status 1

 !     Push rejected, failed to compile Go app

知道这里发生了什么,以及如何去做?

2 个答案:

答案 0 :(得分:1)

对于在1.6中遇到此问题的人来说,这只是一个注释。 Godep已更改为使用Heroku的供应商文件夹,因此您需要根据此处的文档重置您的Godeps以使用供应商:

https://github.com/tools/godep#go-15-vendor-experiment

Heroku也有升级信息:

https://devcenter.heroku.com/articles/go-support#migrating-from-go1-5-godep-workspace-to-go1-6-with-a-vendor-directory

答案 1 :(得分:0)

我有一个对我有用的解决方案,尽管我不喜欢它,并希望它不是正确的方法!

我正在使用供应商。本地和TravisCI都能够构建我的应用程序,但是TravisCI无法将其部署到Heroku,因为Heroku也在查找本地软件包方面遇到了麻烦。我最终要做的是与供应商一起获取本地软件包:

govendor fetch +local

一旦我再次承诺,TravisCI就会构​​建并部署到Heroku,并且我的应用程序可以正常工作。

我不喜欢此解决方案的原因是我现在有重复的代码!我的本地子包可以在/以及供应商中找到:/ vendor /