Ошибка при использовании mgo при развертывании go app в Heroku

Я пытаюсь развернуть приложение Go в 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'

Может ли кто-нибудь помочь мне с этой проблемой?

Спасибо.

Ответ 1

Используете ли вы godep save ./... в своем проекте?

Если да, удалите каталоги Godep и vendor и попробуйте использовать godep save, без ./....

Я делаю это и работаю для меня.

Ответ 2

Ошибка сообщает sasl/sasl.h, но не sasl.go. Файл заголовка sasl.h является частью пакета libsasl2-dev, который не установлен на heroku, и я не знаю простого способа его установить. На мой взгляд, вы можете попытаться найти заголовки sasl на своем локальном компьютере (скорее всего, /usr/include/sasl ) и скопировать в vendor/include/sasl в свой локальный источник приложения go. Затем сделайте их видимыми для CGO, используя конфигурацию heroku config vars, выполняющую

heroku config:set CGO_CFLAGS= -I/app/code/vendor/include/sasl

в консоли heroku, а не git push. Также вы можете найти libsasl2-dev buildpack для heroku и попытаться использовать два buildpacks для вашего приложения с чем-то вроде

heroku buildpacks:add heroku/some_libsasl2-dev

Ответ 3

Наконец-то я нашел решение (от https://github.com/go-mgo/mgo/issues/220#issuecomment-212658192):

  • запустите godep save ./... (чтобы создать каталог поставщика со всеми зависимостями)
  • затем запустите godep save без. /... (это приведет к удалению неиспользуемых файлов)