无法将简单的golang项目推送到heroku

时间:2018-02-17 13:07:22

标签: go heroku

我的项目“testheeroku7777”由两个文件组成。 main.go:

package main

import "fmt"

func main() {

fmt.Println("Hello world!")

}

Procfile:

web: testheeroku7777

当我推动时:

testheeroku7777> git push heroku master

它出错了:

Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (8/8), 645.21 KiB | 5.92 MiB/s, done.
Total 8 (delta 1), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> App not compatible with buildpack: https://codon-buildpacks.s3.amazonaws.com/buildpacks/heroku/go.tgz
remote:        More info:     https://devcenter.heroku.com/articles/buildpacks#detection-failure
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !       Push rejected to testheeroku7777.
remote: To https://git.heroku.com/testheeroku7777.git
! [remote rejected] master -> master (pre-receive hook declined) 
error: failed to push some refs to 'https://git.heroku.com/testheeroku7777.git'

我已阅读提供的链接,但我不知道此错误。

2 个答案:

答案 0 :(得分:0)

Heroku没有在基本映像中安装Go运行时,因此需要您使用go buildpack来构建应用。但是,这还要求您使用诸如dep或govendor之类的销售工具,这意味着这个非常基本的应用程序本身不幸无法使用。

答案 1 :(得分:0)

此问题与Go的新依赖性管理系统有关。 Heroku正在您的项目中寻找一种依赖管理系统,但找不到。这就是为什么它会引发错误。即使您的项目很简单,Heroku也必须具有可以识别的依赖项管理系统。

使用Go模块是依赖项管理的officially-sanctioned method。但是–这是一个很大但又令人惊讶的Go模块怪癖,因为Go模块不适用于GOPATH内的项目。

开始使用Go时,开发人员做了一件大事,将所有项目都放在一个GOPATH位置。所有文档都对此进行了明确说明-这是go代码必须存储的地方,不会在其他任何地方运行。但是现在,如果您要编写需要Go模块的代码,而任何正在heroku上运行的代码都需要Go模块,则该代码的目录必须位于GOPATH之外。我不知道为什么他们没有更明确地说明这一点,但这似乎就是事实。

因此,要使代码正常工作,您需要做的是:

  1. 将您的项目移至GOPATH以外的地方–例如, 以独创性的名义。

  2. 创建一个与您当前名称相同的远程git存储库 项目。

  3. 然后通过在终端命令中键入创建go模块文件 在您的本地目录go mod init github.com/myGithubUserName/myProjectName

  4. 中提示
  5. 接下来,通过在终端中键入git init创建一个本地git存储库。

  6. 通过在命令行中输入git remote add origin http//www.github.com/myGithubUserName/myProjectName.git来标识您先前创建的远程存储库。 终端。

  7. 编写一些出色的代码。

  8. 在提示符下键入git add . && git commit -m “first commit” 提交您的代码。

  9. 键入git push -u origin master以更新远程存储库。

之后,而且只有在此之后,您才可以输入git push heroku master。唯一的安慰是所有现在都应该顺利运行。

还有其他发布者提到的较早的依赖项管理系统,例如govendordep,但是Go模块是官方批准的方法,我想我们也都可以适应现在,以后再说。关于Go模块的最受欢迎的教程似乎就是这样的:https://roberto.selbach.ca/intro-to-go-modules/。搜索也会找到其他一些。