将go app部署到Heroku时,mgo依赖性出错

时间:2016-03-14 15:52:13

标签: heroku go

我正在尝试将Go App部署到Heroku,我正在使用godeps进行依赖管理,正如他们的文档建议的那样。 但是当我git push heroku master时,我收到以下错误,告诉文件sasl.go不存在。

remote: # github.com/grsouza/feeng-api/vendor/gopkg.in/mgo.v2/internal/sasl
remote: vendor/gopkg.in/mgo.v2/internal/sasl/sasl.go:15:24: fatal error: sasl/sasl.h: No such file or directory
remote:  // #include <sasl/sasl.h>
remote:                         ^
remote: compilation terminated.
remote: github.com/grsouza/feeng-api/vendor/github.com/onsi/gomega
remote: 
remote:  !     Push rejected, failed to compile Go app
remote: 
remote: Verifying deploy....
remote: 
remote: !   Push rejected to limitless-ridge-36512.
remote: 
To https://git.heroku.com/limitless-ridge-36512.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/limitless-ridge-36512.git'

任何人都可以帮我解决这个问题吗?

感谢。

3 个答案:

答案 0 :(得分:1)

您在项目中使用godep save ./...吗?

如果是,请删除Godepvendor目录并尝试使用godep save,而不使用./...

我这样做并为我工作。

答案 1 :(得分:0)

错误告诉sasl / sasl.h缺少但不是sasl.go. sasl.h头文件是libsasl2-dev软件包的一部分,它没有安装在heroku上,我也不知道安装它的简单方法。在我看来,您可以尝试在本地计算机上找到sasl标头(很可能是/ usr / include / sasl)并复制到本地go app源中的vendor / include / sasl。然后使用heroku配置变量做

使CGO可见
heroku config:set CGO_CFLAGS= -I/app/code/vendor/include/sasl

在heroku控制台中,而不是git push。 你也可以为heroku寻找libsasl2-dev buildpack,并试着用你的应用程序使用两个buildpacks,如

heroku buildpacks:add heroku/some_libsasl2-dev

答案 2 :(得分:0)

我终于找到了一个解决方案(来自https://github.com/go-mgo/mgo/issues/220#issuecomment-212658192):

  • 运行godep save ./...(创建包含所有依赖项的供应商目录)
  • 然后重新运行godep save而没有./ ...(这将删除未使用的文件)