http://naoya.dyndns.org/~naoya/mt/archives/001682.html
を参考に、最新のCatalyst5.7007で作ってみたところ、
$ script/ndo_tinyurl_create.pl model CDBI CDBI DBI:mysql:tinyurl nobody nobody
を入力した際に、
---
exists "/home/foo/NDO-TinyURL/script/../lib/NDO/TinyURL/Model"
exists "/home/foo/NDO-TinyURL/script/../t"
created "/home/foo/NDO-TinyURL/script/../lib/NDO/TinyURL/Model/CDBI.pm"
created "/home/foo/NDO-TinyURL/script/../lib/NDO/TinyURL/Model/CDBI"
---
となり、Urlmap.pm, cdbi_urlmap.tが生成されません。
そして、そのまま続けると、
$ script/ndo_tinyurl_server.pl
と、サーバを起動しようとしたところで、
---
Use of uninitialized value in hash element at /usr/local/share/perl/5.8.8/Class/DBI/Loader/Generic.pm line 77.
Couldn't instantiate component "NDO::TinyURL::Model::CDBI", "Can't call method "db_Main" on an undefined value at /usr/local/share/perl/5.8.8/Class/DBI/Loader/mysql.pm line 43.
at ./script/ndo_tinyurl_server.pl line 53" at ./script/ndo_tinyurl_server.pl line 53
Compilation failed in require at ./script/ndo_tinyurl_server.pl line 53.
---
と表示されてしまいます。(サーバが起動しません)
urlmapテーブルに対応したクラスが作られていないのが原因だと思うのですが、
なぜクラスが作られないのでしょうか?
perl 5.8.8, mysql 5.0.37です。
$ script/ndo_tinyurl_create.pl model CDBI CDBI DBI:mysql:tinyurl nobody nobody
"create database tinyurl"でtinyurl"データベース"を作成されましたか?
$ script/ndo_tinyurl_create.pl model CDBI CDBI DBI:mysql:tinyurl nobody nobody
の例だとGenerics.pmはtinyurlデータベースに含まれる全てのテーブル情報を取得し、クラスを自動作成します。
たとえばsampleデータベースの中にaaa, bbb, cccというテーブルを作成し
$ script/ndo_tinyurl_create.pl model CDBI CDBI DBI:mysql:sample nobody nobody
としてヘルパースクリプトを実行させると、aaa, bbb, cccと、tinyurlデータベースに含まれる全てのテーブルのクラスを作成します。
ですのでtinyurlデータベースがあるかの確認と、その中にurlmapテーブルが存在するかの確認をしてみては。
generics.pmについては以前ブログに書いたのでよかったら(ABラボラトリ -初めてのPerl勉強中- - Catalystで使用テーブルを明示的に指定しない理由)。
それでも駄目なようでしたら、Catalyst の Catalyst::Helper::Model::CDBI でいつもハマる・・・orz :: Drk7jpこちらの記事の「その2」からの解決法を試してみてください。
コメント(1件)
回答締め切り後だったのですね。
質問者がこれを見られていることを期待して、、、。
私も全く同じメッセージで1日中悩んでおり、ネット中を這いずり
回っておりました。先ほど解決したのでご報告します。
わたしの環境は
Catalyst5.7007(質問者と同じ)
perl 5.8.8(質問者と同じ)
mysql 4.1.20
Class::DBI::Loader 0.32
Class::DBI::Loader:mysql 0.30
Class::DBI::Loader:Generic 0.30
でした。
結論から言いますと、下記より最新のClass::DBI::Loaderを
CPANからダウンロードし、手動でインストールすれば解決
しました。。
http://search.cpan.org/~dmaki/Class-DBI-Loader-0.34/
$ perl -MCPAN -e shell
cpan> install Class::DBI::Loader
でモジュールアップデートをしようとしても、CPAN.pmでは
Class::DBI::Loaderはなぜかv.0.32を最新と判定されてして
まうので解決に時間がかかりました。0.34にアップするには
手動でインストールするしかないようです。
(もしかしたらCPAN.pmの使用方法が悪いのかもしれませんが、、)
原因は、
Class::DBI::Loader:mysql
Class::DBI::Loader:Generic
Class::DBI::Loader
間でうまく引数をやりとりできていなかったようです。
これらのモジュールの整合性の問題かと思い、バージョンを
最新に上げてみたら、うまくいった、という次第です。
質問者の方もこれで解決されることを祈っております。