GitPrepをcartonベースでインストールする
いろいろあって、GitPrepを試してみることに。
共有サーバでのセットアップ手順の他に普通にLinuxでセットアップする方法(setup.shを実行するやつ)もREADMEに書いてあるが、都合上モジュール類をcartonで処理したい。
セットアップスクリプトや起動用のラッパーを読むと、要するにモジュールのサーチパスをどうこうしているだけなので、基本的には「ただのMojoliciousプロジェクト」である。ということは、適切な環境さえ用意すれば、あとはscript/gitprepを叩くだけで動く。
cartonに環境構築を任せるなら、難しいことを何一つ考えなくてもcarton execで動作させることができる。はずだ。
前提
- cartonがインストール済みで正しく動く
git cloneする
git clone https://github.com/yuki-kimoto/gitprep
cpanfileを書き換える
setup.shやその他のセットアップコード、実行スクリプト、同梱モジュールなどを見ると、プロジェクトのコンセプトは「プロジェクト内で完結すること」である。
例えば、基本になるcpanmもMojoliciousフレームワークも同梱されている。その他の同梱されていない依存モジュールはcpanfileに書いてある。同梱してあるcpanmを使ってインストールするという前提だ。
また、各種セットアップスクリプトや実行用ラッパーなども、それを前提としてパスや環境変数の調整を行うようになっている。
これはこれで完結していて良いとは思うのだが、モジュールのインストールパスが何だかよく分からないことになる危険がある。
今回は、環境の調整等も含めて全てcartonで処理したいので、同梱されているいろいろを無視してcpanfileだけ活用する。が、肝心のMojoliciousとかが書いていない(前述の通り含まれている)ので、書かれていない依存モジュールをcpanfileに書き加えておく。
いろいろ調べたり動かしたりした結果、書かれていなくて加えなくてはならなかったのは以下。
requires 'Mojolicious', '== 4.07';
requires 'Mojolicious::Plugin::INIConfig', '== 0.02';
requires 'Mojolicious::Plugin::BasicAuth', '== 0.07';
requires 'Mojolicious::Plugin::AutoRoute', '== 0.12';
バージョン指定は、mojoディレクトリに含まれる「同梱されてきたMojolicious」の各モジュールバージョンにした。
たぶんバージョンにそれほどこだわりはなかろうが、Mojoliciousの最新を持ってくるとvalidationの仕組みが微妙に変わっていたりして動かなくなったりする。まぁ、最新にして「動くようにする」というのでも良い。さほど大変でもないだろう。
carton install
依存モジュールをがばっと入れる。
carton install
して待つだけ。
実行
cartonで必要なモジュールを全部入れたので、同梱の起動スクリプトを使用せず、cartonで直接実行すれば良い。とりあえず試すなら開発サーバにて。
carton exec — morbo script/gitprep
無事立ち上がればOK。
デプロイ等、実運用でのノウハウはそれぞれにお任せします(丸投げ)。どうせただのMojoliciousプロジェクトなので、情報ならどうにでもなるだろう。
上記の依存モジュール調査では、実行してみて足らないものを足す、というのもやった。たぶん上記のレシピだけで問題はないはず。
留意点
当然だが、Mojoliciousがリポジトリに含まれているとかを無視してcartonで入れてしまっているので、今後のアップデートの際に、git pullしたらだいたいアップデート完了!とはならないだろうと思う。アップデート時には主にcpanfileを保守してcarton installというのが基本フローになるだろう。
感想
多少心得があるなら、いろいろ考えるより「普通にMojoliciousプロジェクトをデプロイする」方式のほうが、むしろ馴染みがあって楽なのでは、と思った。
GitPrepについては、本当に気軽に使えるのが良いなと思う。gitoliteみたく、 公開鍵 + sshでのアクセスもユーザー情報と絡めてうまい感じにハンドリングしてくれると嬉しいな。HTTPでも悪くはないけど、使いどころによってはSSLとか考えないといけなくて、その点gitoliteは考えることが少なくて良い。
とはいえ何より、独自の仕組みとかではなく汎用フレームワーク上に作ってあるので、好みに合わせて手出しやすいのが良いかなぁ。本当に欲しいなら自分で付ければ良いのだ。