Perl: 2007年1月アーカイブ
WxPerlで書いたスクリプトをWindowsのEXE形式にしようとppを使いました。
出来たa.exeを実行するものの、実行後なにも表示されずループしている様。
メモリの使用量もずーっと増え続けてる・・・
PAR::Packerのmake testも通るしおかしいな・・・と。
どうやら
pp main.pl
と、「main.pl」を指定してたのが問題みたい。
C:\Documents and Settings\USER\Local Settings\Temp\par-USER\cache-927578f37dd5fe9a7dd4824a9868a808dc38a4b7\inc\script\main.pl
ってのが決め打ちであるじゃん・・・(pp main.plとしなくても)
pp main5.pl
とやったら、同ディレクトリにmain.plとmain5.plがあったよ・・・
おそらく
pp main.pl
だと、その決め打ちmain.plがppの引数のmain.plを呼んで、以下ループ・・・って状態になってたっぽ。
丸一日嵌りました・・・インターフェースは重要でしゅね。
同じような運が悪い人が増えないようppはmain.plが指定できないようになったらいいな。
Catalyst::Plugin::PageCache。
Catalyst::Plugin::CacheとCatalyst::Plugin::Cache::Store::FastMmapの組み合わせだと
[error] Caught exception in engine "metadata must be an even sized list at /Library/Perl/
5.8.6/Catalyst/Plugin/Cache.pm line 211
ってdieしちゃう。
関数呼出しの際の引数の問題でした。
マトモな英語書きてい。
現在はNavicatでテーブルを作成してます。
InnoDBでForeign Keysを設定し、DBIx::Class::Schema::Loaderで動的に読み込み
DBIx::Class::Schema::Loader::RelBuilderでリレーションを自動生成します。
ただ、これが最適だとはちっとも思っていません。
どうしよっかな。
候補は・・・
- Navicat + DBIx::Class::Schema::Loader (現状)
- DBIx::Class::Schema + SQL::Translator::Parser::DBIx::Class
- DBDesigner4 + FabForce::DBDesigner4
結論は2に決定。
1は、バージョンアップが大変。
なので、初期立ち上げまではよいが、ブランチを切るときに面倒。
また、might_haveやhas_oneはRelBuilderでは作れないので
別に書かなくてはならない。
よって、DBのテーブルとDBIxのSchemaクラス両方にORMの情報が分散してしまう。
2は特に弱点なしか。
ORMの情報はDBIxのSchemaクラスのみに集約される。
バージョンアップも
sqlt-diff --to MySQL Schema1=MySQL Schema2=MySQL > SchemaUpdate.mysql.sql
のようにできるので、事の面倒さ相応の対応で済みそう。
リレーションの図式的な把握も、sqlt-graph(SQL::Translator::Producer::GraphViz)があるのでなんとかなる。
ただ、やってみたが、出来たpngは白黒でとても簡素だ・・・
3もORMの情報が分散されてしまう。
"THE END OF SOFTWARE(ジ・エンド・オブ・ソフトウェア)―IT経営の常識が変わる" (ブレインワークス)
この手の本では久々のヒット。良い本です。
買ったきっかけは、Jun ShimizuさんのCatalyst::Helper::Model::CRUDを見たのがきっかけ。
DBDesigner4のER図がDBに流しこみをやろうとして見付けまいた。
Podにはシャノンという社名があったので、それでググってPDFを見つけました。
「Catalystを使ったエンタープラ イズアプリケーションの構築」。
Catalystをフル活用されているようです。
そのシャノンさんの事例がこの本に載っているということで読んでみました。
以下メモ
共通の問題領域を解消するツールを作成し、それをマルチテナントでサービス
なるべくコード書かない サイクル リサイクル stay thin
残念ながらCatalyst::Helper::Model::CRUDを含め
去年8月ぐらいでシャノンさんのPMの更新が止まっているようなので
替りに後でFabForce::DBDesigner4を調査。
SalesForce版DashBoardというか、
全ての事業所が繋がっているDashBoard Widgetがあったら面白いかも。
CPANで
% install Task::Catalyst
などとすると
*** Module::AutoInstall version 1.02
*** Checking for Perl dependencies...
[Core Features]
- Catalyst ...missing. (would need 5.65)
==> Auto-install the 1 mandatory module(s) from CPAN? [y]
[Log4perl Support]
- Params::Validate ...missing.
- Catalyst::Log::Log4perl ...missing. (would need 0.1)
==> Auto-install the 2 optional module(s) from CPAN? [y]
[HTML::Widget Support]
- Date::Calc ...loaded. (5.4)
- Catalyst::Plugin::HTML::Widget ...missing. (would need 1.1)
==> Auto-install the 1 optional module(s) from CPAN? [y]
と聞かれて、Enter連打してました。
このインストールを担当してるのはModule::AutoInstallです。
Podを読んでみたら、これを回避する方法が分かりました。
環境変数、PERL_AUTOINSTALLに--defaultdepsをセットします。
そんだけです。
具体的には・・・
% export PERL_AUTOINSTALL="--defaultdeps"
% cpan
や
% PERL_AUTOINSTALL="--defaultdeps" cpan
や
% perl Makefile.PL && PERL_AUTOINSTALL="--defaultdeps" make
です。
でもlwpなんかのインストールだと、聞かれちゃいますね。

