現在のcarton利用時のモジュールアップグレード方法について

追記(2013/09/20) carton1.0以降を使うことにより下記の問題はすべて解決しています。心配するのをやめて新しいcartonをお使いください。

 

cartonはupdateコマンドが現在まだサポートしていない。

問題は二つあって、

  1. development環境でアップグレードしたモジュールがcarton.lockに反映されない
  2. deployment環境でcarton.lockに反映されているモジュールのバージョンが正しくインストールされない。

というのがあるのでそれぞれの現在の現実的な解決策をメモ。

モジュールのアップグレード自体は

cpanm -L local FooModule

またはcpanfile/Makefile.PL/Build.PLに新たな依存条件を記述して

carton install

のどちらでもおk.

development環境でアップグレードしたモジュールがcarton.lockに反映

問題の詳細については以前書いたエントリを参照。今回はアップグレードへの対応という意味での現実的な対策である解決策1"最新バージョンをインストールバージョンとする "を行うスクリプトを書いたのでこれを使う。

cpandupmetaclean

実行結果は

% 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をインストールすると良いと思います。