GrowthForecastをHerokuで動かしてみる

HerokuといえばPaaSでは一番有名かなぁと思います。オフィシャルにはperlはサポートされてないんですが、buildpackというスクリプト群を準備してあげるとperlも使えます。miyagawaさんが公開されているものを少しだけ改造して、それを利用してGrowthForecastをHerokuで動かしてみました。

当然鬼門はRRDtool

GrowthForecastを動かすにあたって、一番の鬼門はご存知RRDtoolになります。依存ライブラリが多く、入っていない場合にはそのインストールが必要になります。gfxさん作のAlien::RRDtoolがMakefile.PLの依存に書かれているので、もし必要なライブラリが一定のパスに入っていれば簡単にインストールすることができます。

herokuの環境はよく見てみると、libcairoとかlibpangoが入っていて一見簡単にできそうなんですが、ヘッダファイルとかを発見できず、一発で簡単にインストールというわけにはいきませんでした。

手でインストール

あまり細かいことは気にせずに、一旦必要なライブラリのビルド環境を準備したうえでRRDtoolのPerlモジュールを作成してみました。詳細は省略。。。

で、出来上がったRRDs.solddで見てみると実は標準的なパスで動的リンクできてました。そのバージョンと揃えるとか考えずにビルドしましたが、とりあえずこの共有オブジェクトで無事RRDs.pmが使えるということがわかりました。

.soをレポジトリに入れてしまう

というわけで、GrowthForecastからAlien::RRDtoolの依存を削って、レポジトリの中のlocal/lib/perl5配下にHerokuのアーキテクチャ用にモジュールを配置してしまいました。先ほどの自分の修正版のbuildpackではレポジトリのlocalディレクトリに入っているのは消さずに使ってくれるので、これでバッチリ動きます。

librrdを静的リンクしてるRRDs.soをバイナリの状態で配布していいのか理解してないので問題あれば削除します。

無駄に大変だった。。。

Herokuのssh loginが機能をだいぶ制限されてて大変でした。viすらないなんて!外のサーバに書いてアップロードしたのをダウンロードして実行したり、出来上がったバイナリも外にアップロードしたりとやりくりしました。

今後

GrowthForecastのホスティングっぽいのやれたら面白いなぁと思ってるのでやろうとしてます。Kossyはあまり慣れてないので、まずAmon2::Liteに書き換えて、Amon2::Auth使ったログイン機能とそれと結びつけてAPIにDigest認証かけようかなぁとか。そのままでも別にいいですけどw

あと、今は起動がProclet使ったスクリプト経由なんですが、問題なさそうならProcfileに分割してみようかなと思ってます。中身読んでないのでダメそうなら諦める。