carton での運用回りで調べた事とか

本日のcarton化についての会話 - $shibayu36->blog;

で色々話した。

carton bundle で fatpack した vendor/bin/carton には xs 依存の物が入ってしまっているが実行には特に問題ないようだ。( vendor/bin/carton install --deployment --cached とかを試した)

deploy される server とする server が全く同じ場合は する server で carton install し local directory に cpan module を突っ込みそのまままけばいいように思う。そうじゃない場合は、される server で carton install --deployment などをする必用があると思う。

carton bundle しておくと mirror を vendor/cache に作っておけるので metacpan が落ちた時とかでも安心なのかな?

この場合新しく cpanfile に追加し carton install をした際には必ず carton bundle --nofatpack をしないといけない。でも人間なのでいつか忘れたままコミットする人が出てきそうなので

use strict;
use warnings;
use utf8;

use Test::More;
use Carton::Builder;
use Carton::Environment;

my $env = Carton::Environment->build;
$env->snapshot->load;

for my $dist ( $env->snapshot->distributions ) {
    my $path = $env->vendor_cache->child('authors/id/' . $dist->pathname);
    ok -e $path, "$path";
}

done_testing;

というのを書いて snapshot と vendor/cache にずれがないかをテストするといいのかなと思った。あと間違えて vendor/bin/carton の version があがってしまうことも考えられたのでそれもテストに書いた。

ただ、fatpack した carton はコマンドでしか存在しないので、上のようなテストを書くには cpanfile に requires 'Carton' としないといけない。これはどうしようもないのだろうか.........