at posts/single.html

tDiaryをHeroku pipelineで動かせるようにした

HerokuにはHeroku pipelineという機能がある。Githubと連携して、プルリクエストのたびに自動的にHerokuのインスタンスを生成してくれる。わざわざブランチをローカル環境に持ってきて動かす手間が省けるのでとても便利な機能。この機能を使うためには、masterブランチ(プルリクエストの元になるブランチ)がHerokuへのデプロイに対応している必要がある。

tDiaryはこれまで、Herokuへのデプロイはheroku専用ブランチのみ対応していた。これは、Heroku独自の設定 (揮発性環境に対応するため日記データをMongoLabに保存するためのgemの追加や特有のtdiary.confファイルの配置など) を加えているため。Heroku pipelineを使いたかったので、tDiaryのmasterブランチでもHerokuへデプロイできるようにした。

要はHeroku特有に用意したファイル (Gemfile.local, Gemfile.lock, tdiary.conf, あとは専用の更新用プラグイン) を差し替えるだけ。ところが、Herokuのapp.jsonファイルではデプロイ後に動かすスクリプトはpostdeployとして指定できるが、デプロイ前のスクリプトは指定できない。しかたがないので、デプロイ時に動かすHerokuのbuildpackをカスタマイズすることにした。

はじめは公式のruby用buildpackをforkしてみたが、これが内部的に結構複雑なことをやっている。もう少し調べていたらデプロイ時には複数のbuildpackを指定できることがわかったので、ファイルをコピーするだけのbuildpackを書いて、公式のruby用buildpackと併用することにした。buildpackの中身は単純なシェルスクリプト。久しぶりにシェルスクリプトを書いたよ。

heroku pipeline

これでプルリクエストのたびにHerokuへ自動デプロイされるようになり、 tDiary の開発がもっとはかどるようになった。よかった。

関連する日記