現在のcarton利用時のモジュールアップグレード方法について
追記(2013/09/20) carton1.0以降を使うことにより下記の問題はすべて解決しています。心配するのをやめて新しいcartonをお使いください。
cartonはupdateコマンドが現在まだサポートしていない。
問題は二つあって、
- development環境でアップグレードしたモジュールがcarton.lockに反映されない
- deployment環境でcarton.lockに反映されているモジュールのバージョンが正しくインストールされない。
というのがあるのでそれぞれの現在の現実的な解決策をメモ。
モジュールのアップグレード自体は
cpanm -L local FooModule
またはcpanfile/Makefile.PL/Build.PLに新たな依存条件を記述して
carton install
のどちらでもおk.
development環境でアップグレードしたモジュールがcarton.lockに反映
問題の詳細については以前書いたエントリを参照。今回はアップグレードへの対応という意味での現実的な対策である解決策1"最新バージョンをインストールバージョンとする "を行うスクリプトを書いたのでこれを使う。
実行結果は
% cpandupmetaclean Find 2 Duplicate modules HTTP::Body * 1.17 1.16 HTTP::Message * 6.06 6.03 Clean old .meta directories?(Y/n) HTTP::Body : Delete .meta directories... 1.16 local/lib/perl5/i686-linux/.meta/HTTP-Body-1.16 unlink local/lib/perl5/i686-linux/.meta/HTTP-Body-1.16/MYMETA.json unlink local/lib/perl5/i686-linux/.meta/HTTP-Body-1.16/install.json rmdir local/lib/perl5/i686-linux/.meta/HTTP-Body-1.16 HTTP::Message : Delete .meta directories... 6.03 local/lib/perl5/i686-linux/.meta/HTTP-Message-6.03 unlink local/lib/perl5/i686-linux/.meta/HTTP-Message-6.03/MYMETA.json unlink local/lib/perl5/i686-linux/.meta/HTTP-Message-6.03/install.json rmdir local/lib/perl5/i686-linux/.meta/HTTP-Message-6.03
となり、metaディレクトリが綺麗になるのでその後再度
carton install
を実行すると、carton.lockが最新バージョンに更新されるはず。
deployment環境でcarton.lockに反映されているモジュールのバージョンをインストールする
carton.lockにかかれている他のモジュールから依存されているモジュールをアップグレードした場合、その親モジュール側のバージョンが既にインストール済みだと、依存されている側のモジュールのアップグレードが起こらないという問題がある。
これについて今日、pull requestを送ったのでこれが取り込まれるのを待つか、自分のforkレポジトリからcartonをインストールすると良いと思います。