Goで作ったアプリをherokuに上げるときのメモ

この前herokuにgolangのアプリを初めてデプロイしたんですが、絶対に忘れそうな手順だったので、次にやるときにここ見ればできるようにメモっておきます。

手順

1. .godirを用意する。

プロジェクトのルートにgo get先を記した.godirを用意します。

$ echo "github.com/yosuke-furukawa/goweb-sample" > .godir

2. Procfileを用意する。

$ echo "web: goweb-sample" > Procfile

go buildで作られるバイナリを実行する形式で指定しておく。

3. goのbuildpackを入れてheroku createする

$ heroku create -b https://github.com/kr/heroku-buildpack-go.git goweb-sample

heroku-buildpack-goを使う。




とまぁこんな感じのステップで公開できる。

mgo から mongo labを使うとき

MONGOLAB_URIからDB名とDBのuriをパースしてアクセスさせる必要があります。
僕の適当実装はこちら。

package tweets

import (
  "labix.org/v2/mgo"
  "os"
  "regexp"
)

func getSessionAndDB() (*mgo.Session, *mgo.Database) {
  envuri := os.Getenv("MONGOLAB_URI")
  dburi := "localhost"
  dbname := "tweets"
  if envuri != "" {
    uriRegExp := regexp.MustCompile(`(.*)\/(\w+)`)
    connects := uriRegExp.FindStringSubmatch(envuri)
    dburi = connects[0]
    dbname = connects[2]
  }

  session, err := mgo.Dial(dburi)
  session.SetSafe(&mgo.Safe{})
  if err != nil {
    panic(err)
  }
  return session, session.DB(dbname)
}


ちなみにgoの依存関係を固定するにはgodepを使うのがいいかもしれないと思ったけど、godep何故かsaveがうまく行かず断念。
依存関係系のツール多いから一旦まとめてみたい。