【Go】サードパッケージを使用したアプリケーションをHerokuにデプロイする

2020/02/29 現在この記事のやり方ではデプロイできません。

下記、リンク参照

govendorで依存関係のファイルが取得できないエラーについて

go modulesを使用したやり方

サードパッケージを使用したGoのアプリケーションをHerokuにデプロイする v2

概要

Portfolioを作るに当たってGoでHerokuにデプロイしようとしたらハマった 結論からいうとパッケージのコミット漏れ

Herokuで公式HPにデプロイ方法は載っていたが、サードパッケージを使用した際はハマるので今回の事象を押さえておく

#Goでアプリケーションを作成 今回はginでプロジェクトを作成する Heroku用のフォルダを作成し、以下のファイルを配置

package main

import (
	"github.com/gin-gonic/gin"
)

type User struct {
	Name string
	Age  int
}

func main() {
	router := gin.Default()
	// css、js などの静的ファイルを読み込む場合。今回は使用しない。
	// router.Static("/assets", "./assets")

	router.LoadHTMLGlob("templates/*.html")

	router.GET("/", handler)

	router.Run()
}

func handler(ctx *gin.Context) {

	user := User{"User", 20}

	ctx.HTML(200, "index.html", gin.H{
		"user": user,
	})
}
<!DOCTYPE html>
<html>
    <div>
        <p>Name: {{.user.Name}} </p>
        <p>Name: {{.user.Age}} </p>
    </div>
</html>

#govendorを使用してサードパッケージを追加 govendor をインストールしてから行ってください。 https://github.com/kardianos/govendor

govendorについては下記の記事がとても理解できたので参考にさせて頂きました。 Heroku への Go 言語製アプリケーションのデプロイと依存パッケージ管理方法の比較

# 初期化
$ govendor init
# 依存パッケージのダウンロード
$ govendor fetch +out

後はHeroku公式のコマンド通り、コミット→プッシュを行う

$ git init && git add -A .
Initialized empty Git repository in /Users/kazu/workspace/go/src/Heroku/.git/

$ git commit -m "init"
create mode 100644 main.go
create mode 100644 templates/index.html
〜〜〜 以下、vendor配下のファイル 〜〜〜〜〜〜
 create mode 100644 vendor/***
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
create mode 100644 vendor/vendor.json

Herokuのアプリを作成

$ heroku create
Creating app... done, ⬢ ancient-mesa-82891
https://ancient-mesa-82891.herokuapp.com/ | https://git.heroku.com/ancient-mesa-82891.git
$ git push heroku master

Goのアプリケーションのデプロイ完了

ちなみにpushする際にgovendor fetch +out のコマンドを実行していない場合、下記のようなエラーが出る。

-----> Go app detected
-----> Fetching jq... done
-----> Fetching stdlib.sh.v8... done
-----> Checking vendor/vendor.json file.
 !!    The 'heroku.goVersion' field is not specified in 'vendor/vendor.json'.
 !!    
 !!    Defaulting to go1.12.12
 !!    
 !!    For more details see: https://devcenter.heroku.com/articles/go-apps-with-govendor#build-configuration
 !!    
-----> New Go Version, clearing old cache
-----> Installing go1.12.12
-----> Fetching go1.12.12.linux-amd64.tar.gz... done
-----> Fetching govendor... done
 !!    Installing package '.' (default)
 !!    
 !!    To install a different package spec set 'heroku.install' in 'vendor/vendor.json'
 !!    
 !!    For more details see: https://devcenter.heroku.com/articles/go-apps-with-govendor#build-configuration
 !!    
-----> Fetching any unsaved dependencies (govendor sync)
-----> Running: go install -v -tags heroku . 
main.go:4:2: cannot find package "github.com/gin-gonic/gin" in any of:
	/tmp/tmp.hTplalCHiU/.go/src/Portfolio/vendor/github.com/gin-gonic/gin (vendor tree)
	/app/tmp/cache/go1.12.12/go/src/github.com/gin-gonic/gin (from $GOROOT)
	/tmp/tmp.hTplalCHiU/.go/src/github.com/gin-gonic/gin (from $GOPATH)
 !     Push rejected, failed to compile Go app.
 !     Push failed

HerokuのGithubにサードパッケージをコミットできていないためビルドエラー起きてしまうとのことでした。

公式のやり方だけでは静的なアプリケーションをデプロイできてもサードパッケージを使用した際にできないため、少し工夫が必要でした。

GoPathの考え方に慣れていかないとですかね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA