GrowthForecastをHerokuで動かしてみる
Heroku といえば PaaS では一番有名かなぁと思います。オフィシャルには perl はサポートされてないんですが、buildpack というスクリプト群を準備してあげると perl も使えます。miyagawa さんが公開されているものを少しだけ改造して、それを利用して GrowthForecast を Heroku で動かしてみました。
当然鬼門は RRDtool
GrowthForecast を動かすにあたって、一番の鬼門はご存知 RRDtool になります。依存ライブラリが多く、入っていない場合にはそのインストールが必要になります。gfx さん作のAlien::RRDtool
が Makefile.PL の依存に書かれているので、もし必要なライブラリが一定のパスに入っていれば簡単にインストールすることができます。
heroku の環境はよく見てみると、libcairo とか libpango が入っていて一見簡単にできそうなんですが、ヘッダファイルとかを発見できず、一発で簡単にインストールというわけにはいきませんでした。
手でインストール
あまり細かいことは気にせずに、一旦必要なライブラリのビルド環境を準備したうえで RRDtool の Perl モジュールを作成してみました。詳細は省略。。。
で、出来上がったRRDs.so
をldd
で見てみると実は標準的なパスで動的リンクできてました。そのバージョンと揃えるとか考えずにビルドしましたが、とりあえずこの共有オブジェクトで無事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 に分割してみようかなと思ってます。中身読んでないのでダメそうなら諦める。