タイトル通りの内容です。
エラーの内容
TravisでpushごとにCIを走らせている設定にしていたんですが、以下のようなことを言われた。
(以下はtravisのログのコピペ)
$ PERL5OPT='-MDevel::Cover=-db,./cover_db' carton exec prove -lrv t && carton exec cover -ignore_re "^local/" -report coveralls
Can't load module t::Util at /home/travis/perl5/perlbrew/perls/5.20/bin/prove line 12.
The command "PERL5OPT='-MDevel::Cover=-db,./cover_db' carton exec prove -lrv t && carton exec cover -ignore_re "^local/" -report coveralls" exited with 2.
Done. Your build exited with 1.
エラーが起こったことはわかったんだけど、エラー内容がわからなくて対処できんというやつです。
proveはモジュール読み込みで失敗した際、存在有無とかコンパイルエラーとか原因に関わらず単純に「エラーだよ」というメッセージしか出さないみたいです。どうしよう。
対処方法
どう対処するかと言ったらinstall hookでperlを動かしてみて検知するしかない。
以下のように install時に carton exec perl t/Util.pm
を実行するように追記。
travis.yml
# 前略
install:
- carton install
- carton exec perl t/Util.pm
# 後略
そして git push
後にログを見る。
$ carton exec perl t/Util.pm
Can't locate String/CamelCase.pm in @INC (you may need to install the String::CamelCase module) (@INC contains: /home/travis/build/celeron1ghz/p5-Hirukara-Web/t/../lib /home/travis/build/celeron1ghz/p5-Hirukara-Web/local/lib/perl5/x86_64-linux /home/travis/build/celeron1ghz/p5-Hirukara-Web/local/lib/perl5 /home/travis/perl5/perlbrew/perls/5.20/lib/site_perl/5.20.0/x86_64-linux /home/travis/perl5/perlbrew/perls/5.20/lib/site_perl/5.20.0 /home/travis/perl5/perlbrew/perls/5.20/lib/5.20.0/x86_64-linux /home/travis/perl5/perlbrew/perls/5.20/lib/5.20.0 .) at /home/travis/build/celeron1ghz/p5-Hirukara-Web/t/../lib/Hirukara.pm line 47.
BEGIN failed--compilation aborted at /home/travis/build/celeron1ghz/p5-Hirukara-Web/t/../lib/Hirukara.pm line 47.
Compilation failed in require at t/Util.pm line 65.
BEGIN failed--compilation aborted at t/Util.pm line 65.
The command "carton exec perl t/Util.pm" failed and exited with 2 during .
Your build has been stopped.
はい、dependenciesの追記忘れですね。
carton
でやっていれば大体はそんなことは起こらないんですが、うっかりcarton install
でなくcpanm
でインストールすると、開発環境だと存在するけれどテスト実行環境だとないモジュールが存在する感じになります。
こういう場合はvagrantとかで手元にクリーンな環境を用意してそれを利用すべきですが、すぐ解決したい場合にご参考ください。