LoginSignup
15
14

More than 5 years have passed since last update.

Yesodで作ったWebアプリをHeroku上でビルドしようとしても15分以内に終わらないときは

Last updated at Posted at 2014-04-10

Herokuの15分ルール

YesodアプリをHerokuにデプロイするというトピックを書きましたが、難関があります。
Herokuは、ビルドが15分経っても終わらないとデプロイを失敗させてしまうのです。
そして、Yesodで作ったアプリケーションは、ビルドに15分以上かかるのは珍しいことではありません・・・

ビルドサーバ「Anvil」

15分ルールに対抗するには、Anvilというビルドサーバが使えます。
heroku-buildpack-ghcのページに書いていました

ビルドサーバはHerokuでのビルドとは関係ないので、15分ルールに縛られないようです。

ビルドサーバでのビルド〜デプロイの流れ

概ね次のような流れになります。

  1. ビルドサーバにプロジェクトをアップロード
  2. ビルドサーバ上でビルド
  3. 2で生成されたslug(Heroku用語で、アプリ実行に必要なファイル群のこと)をビルドサーバ上に保存
  4. ビルドサーバ上のslugをHerokuにリリース

ビルド〜デプロイ手順

前提

  • Heroku Toolbeltが導入されていること

準備

ビルドサーバでのビルドには、Heroku Toolbeltをプラグインで拡張する必要があります。

heroku plugins:install https://github.com/ddollar/heroku-anvil

これでheroku buildコマンドとheroku releaseコマンドが使えるようになります。

これらのコマンドの使い方の詳細はこちら

ビルド〜デプロイを一発で行う

Herokuにデプロイするプロジェクトのディレクトリで、次のコマンドを実行します。
Yesodアプリをデプロイする想定なので、buildpackを指定します。

heroku build -r -b https://github.com/begriffs/heroku-buildpack-ghc.git

運が良ければ(時間こそかかりますが)これ一発でデプロイは完了です!
なんという便利さ!

ビルドに失敗した場合

ビルドに失敗することは、よくあります。Yesodアプリのデプロイは安定しないのです。
あきらめずに何度もビルドしましょう。

ビルドには成功したがデプロイに失敗した場合

slugは作成されたがデプロイに失敗することも、よくあります。Yesodアプリのデプロイは安定しないのです。

この場合はビルドをスキップしてslugのリリースだけを次のコマンドで行います。

heroku release <slugのURL>

なお「ビルドに成功している!」というのは次の出力を見て判断出来ます。

Putting cache... done 
Creating slug... done 
Uploading slug... done 
Success, slug is https://api.anvilworks.org/slugs/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.tgz 
Releasing to metshop... ...................................

Success, slug is https://…で始まる行が出力されていれば、ビルドには成功しています。

2回目以降のビルド

2回目のデプロイは、平常どおりGitを通して行えるそうです。

git push heroku

前回デプロイのslugがキャッシュされているため、ビルド時間が短縮され15分かからなくなる・・・とheroku-buildpack-ghcのページには書かれています
が、実感としてはあまり変わらない気がしています。

課題

ビルドサーバ上のGHCのバージョンを指定する方法が見付かっていません。

まとめ

ビルドサーバでのビルドとデプロイは、Yesodアプリをローカルでビルドしてのデプロイを試みていた時に比べると、まさに比べ物にならない簡単さです。

不安定なところがあり長時間待たされたあげく失敗に終わってがっかりすることも多いのですが、Yesod導入の困難を乗り越えた開発者の方であれば、これくらいのことは蚊に刺されたほどにも感じないのではないでしょうか。

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