Heroku部署错误:无法检测到buildpack

时间:2017-09-28 06:03:52

标签: heroku go

我正在尝试将我的Discord Bot部署到Heroku,并且我已成功将我的Github帐户链接到Heroku。它可以成功找到我正在尝试部署的存储库,但是当我尝试手动部署时,它会给我错误:

 !     No default language could be detected for this app.

        HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.

        See https://devcenter.heroku.com/articles/buildpacks

 !     Push failed

我的机器人在Go中编码,由Heroku支持。可能是我的代码有外部库吗?如果是这样,我如何在Heroku中添加对这些库的支持?提前谢谢。

1 个答案:

答案 0 :(得分:1)

On Heroku项目使用所谓的buildpacks编译/构建。为使用不同语言的项目创建特定的构建包。对于Go项目,存在heroku/go,它知道如何获取,编译和构建Go项目,包括在构建过程中自动获取它们的依赖项。

buildpack选择可以手动或自动进行。您看到发布的错误,因为您没有手动设置任何构建包,并且自动检测失败。请参阅以下原因。

手动构建包选择

对于手动选择,请下载Heroku CLI,然后执行以下命令:

heroku buildpacks:set heroku/go

注意:如果您是第一次使用heroku cli,则可能需要使用heroku login登录。此外,如果默认情况下未选择您的应用,您可以使用-a--app参数指定它,例如:

heroku buildpacks:set heroku.go -a yourappname

要查看选定的构建包,请执行heroku buildpacks命令。

自动构建包检测

仅仅因为项目使用Go语言,heroku/go buildpack不会自动被选中。

是否应使用heroku/go的实际检测由脚本heroku-buildpack-go/bin/detect完成,检测逻辑为:

if test -f "${build}/Godeps/Godeps.json" || # godeps
   test -f "${build}/vendor/vendor.json" || # govendor
   test -f "${build}/glide.yaml" || # glide
   (test -d "${build}/src" && test -n "$(find "${build}/src" -mindepth 2 -type f -name '*.go' | sed 1q)") # gb
then
  echo Go
else
  exit 1
fi

基本上检测到Go语言,如果项目中存在以下文件之一,则会自动选择heroku/go buildpack:

  • Godeps/Godps.json;由godep
  • 使用
  • vendor/vendor.json;由govendor
  • 使用
  • glide.yaml;由glide
  • 使用
  • src/*/*/**/*.go;由GB
  • 使用

进一步阅读

关于使用Go和Heroku工作的官方文章:

Getting Started on Heroku with Go

Heroku Go Support