15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Heroku に Goji/PostgreSQL で作った Web アプリをデプロイ

Last updated at Posted at 2015-01-02

Goji というのは Go の Web アプリケーションフレームワークです。
機能的には薄めですが、標準の net/http と違ってメソッドベースでのルーティングもでき、Ruby の Sinatra みたいなノリで使えると思います。

この記事では Goji で PostgreSQL にアクセスする Web API を作って、Heroku にデプロイします。

構成

  • Go v1.4
    • WAF: Goji v0.8.1
    • ORM: Gorp v1.7
  • PostgreSQL v9.4.0

作るもの

持ち物リストアプリのための RESTful な JSON Web API
(アプリの方も Swift で作って正月休み中に動かしたい)

できたもの

yuya-takeyama/bali-api

記事執筆時点でのコミットはこちらから

とりあえず自分の環境で動かしたい、という方のために Heroku Button も用意しています。

PostgreSQL への接続

Gorp の使い方それ自体への説明は省略します。
Heroku で heroku-postgresql のアドオンを使用する場合は、環境変数 DATABASE_URL にデータベースへの URL がセットされるので、それをそのまま利用するようにします。

db, err := sql.Open("postgres", os.Getenv("DATABASE_URL"))

今回 Gorp という ORM を使っていますが、Gorp は標準の database/sql をラップしたものなので、sql.Open() で環境変数 DATABASE_URL を使うことだけ気をつければ、その他の ORM でも同じやり方でできると思います。

この場合、ローカルでの接続は以下のようになります。

$ DATABASE_URL=postgres://yuya@localhost/bali_api_development?sslmode=disable go run main.go

ユーザ名やデータベース名等についてはそれぞれの環境のものを指定してください。
私の場合は Homebrew でインストールしたものを使っており、以下の記事を参考にしました。

sslmode については、ローカルで使っているものは SSL が有効でなかったので disable としましたが、heroku-postgres においては sslmode=require となっているようです。

Heroku へのデプロイ

Buildpack を使ったデプロイ

Go 用の Buildpack を使った一般的なデプロイの手順については以下の記事を参考にしました。

Goji の場合

Goji 特有の事情としては、ポート番号の指定をどうするか調べる必要がありましが、結論から言うと何も気にせずとも問題ありませんでした。

Goji はデフォルトでは 8000 版のポートでリッスンしますが、環境変数 PORT がセットされていればそちらを使うようになります。
Heroku においては環境変数 PORT がセットされるようになっているので、勝手に正しいポートが選択されるようになります。

まとめ

Goji と Gorp (というか github.com/lib/pq) は Heroku フレンドリーな作りとなっており、簡単に Heroku にデプロイできました。

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?