概要: WindowsXP で Catalyst 使いたい!と言うことで挑戦してみた。
Windows で Catalyst を使うために CPAN でのインストールを挑戦してみた。 最初結構無謀かと思ったけど、なんとかなってしまったので色々とメモる。
最初に前提として CPAN でモジュールがインストール出来るようにしておくこと。
で、まず cpan でinstall Catalyst
するなりして Catalyst に必要な Perl モジュールを入れる。
cpan でエラーが出て入らなかった場合、PPM でインストールすると良いかも。
で、必要なモジュールが入れ終わって、Catalyst のテストを実行するとき nmake が
NMAKE : U1095:
と言う感じのエラーを出す。
調べてみたところこれは nmake への引数が、OS の制限より長いことが原因らしい。 で、これを回避するために Catalyst の Makefile をちょっと改造する。
Makefile は cpan でinstall Catalyst
した時に Catalyst の
ファイルが展開されたディレクトリ(cpan/build 以下)にある。
で、Makefile のTEST_FILES
という設定を見つける。
この項目に Catalyst のすべてのテストが指定されているんだけど、 これが OS の制限を超えるほど長いので、
TEST_FILES = t/*.t
と言う感じにして、短くする。
これでテストは問題なくなるので cpan に戻ってinstall Catalyst
をする。
自分の環境の場合、c3_mro.t というテスト以外はすべて通った。
で、c3_mro.t が Win32.pm が@INC から見つからないというエラーが出てたんだけど、 その@INC に ActivePerl の CPAN モジュールがインストールされたディレクトリが何故か含まれてなかった。
試しに PPM で Win32 モジュール入れてみたものの、 相変わらずモジュールが見つからないとか言ってきたので、 試しに Catalyst が展開されたディレクトリにもぐって、
prove -I lib t/c3_mro.t
と言う感じで単体でテストしたらちゃんと通ったので、テストが要求している動作はしていると判断、
force install Catalyst
して強制的にインストールした。
これで Catalyst 本体は入ったので、他の開発用コマンドとか、
Catalyst のプラグインとかそういったものを入れるためにinstall Task::Catalyst
する。
ちなみにこれは結構時間がかかった。
で、いくつかモジュールのインストールに失敗する->Catalyst のプラグイン入らないと言うことがあったので、
PPM でこけたモジュールをインストール->cpan に戻ってinstall Task::Catalyst
と言うことを繰り返した。
ちなみにこのときどうも Catalyst::Plugin::Session が循環依存しているみたいでうまく入らなかった。 正確には Catalyst::Plugin::Session が
- Catalyst::Plugin::Session::State::Cookie
- Catalyst::Plugin::Session::State::URI
を要求していて、上記二つも Catalyst::Plugin::Session を必要としているとかそんな感じ。
仕方がないので、展開された Catalyst::Plugin::Session のディレクトリにもぐって、 Makefile.PL の上記二つのモジュールを要求する部分をコメントアウト、 んで、
perl Makefile.PL
nmake test
nmake install
して入れた。その後上記二つのモジュールをインストールした。
まあ、こんな感じでようやく Catalyst のモジュールを入れ終わった。はっきりいってマゾい。 実のところ PPM に Catalyst はあったりするんだけど、実際にはバージョンがちょっと古かったりする。
で、ここまでやって、PPM でinstall Task::Catalyst
して必要なモジュールをインストール、
そのあと PPM でインストールした Catalyst をアンインストールして、
CPAN 経由で Catalyst の最新版入れればよかったなーとも思ったりするのが遅かった。
ちなみにこのエントリ作業しながら書いてて、実際作業し終わるのに 2 日かかりました。 要するにこのエントリ書き始めて二日目です。
とりあえずこれで Windows で Catalyst 使って開発できるようになった。 あとはちょっとづつ勉強しよう。
#FIXME