« おもむろにbrew upgrade mysqlしたらTest::mysqldが起動しなくなって泣いた | メイン | 「仕事に対する愛と情熱とプライド」若しくは新卒に向けたスピリチュアルな話 »

2013年3月18日

carton execでTest::mysqldが起動できなくて泣いた

% carton exec -Ilib — prove -lv t/mysqld.t
*** mysqlinstalldb failed ***
Can’t locate lib/core/only.pm in @INC (…

結論から言うと、carton execしたperlと別バージョンのperlがどこかで使われて、 そのPerlにlocal::lib(lib::core::only)が入っていないと死ぬ。

Test::mysqldだと、mysql_install_dbっていうMySQLのコマンドをキックしている んだけど、それが実はperlスクリプトで、/usr/bin/perlってshebangに書かれていて System perl前提にしているのだけど、それにlocal::libが入っていないとコケる。

Carton:CLI#cmd_execの中でPERL5OPTを以下のようにセットしているんだけど、 それが配下のプロセスにグローバルに影響を与えてしまうのが原因。

local $ENV{PERL5OPT} = "-Mlib::core::only -Mlib=$lib";

とりあえず手元では sudo cpan local::lib して凌いだ。cpanコマンドとか何年ぶり だろうかw

perlで書かれてSystem perl前提にしているコマンドをキックしているような場合に 軒並み動かない可能性があるので場合によっては困りそう。

根本的な解決は難しそうだなーという気はしているんだけど、とりあえず、 issueあげておいた。

該当のperlにlocal::lib入れれば解決するので、同様の現象で悩んでいる人も いるかもしれないのでとりあえずblogった。

local::libがperl coreに入れば徐々に解決といえば解決ではある。

3/18 23:45 追記:

ということで、既知の問題で修正を考えているとのことです。なんかこうmiyagawaさんから反応あるとすごく嬉しいですね!

投稿者 Songmu : 2013年3月18日 11:00