Catalyst model の作成

sqlite3を使う。
hello.sqlを書いて下記のコマンドを実行する。


PS D:\Perl\apps\Hello\db> sqlite3 --init hello.sql hello.db
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE user (
id integer PRIMARY KEY,
login_id TEXT,
login_pw TEXT
);
COMMIT;
できた。

以下のコマンドを叩く。


D:\Perl\apps\Hello>.\script\hello_create.pl model DBIC DBIC dbi:SQLite:/Perl/apps/Hello/Hello.db
exists "D:\Perl\apps\Hello\lib\Hello\Model"
exists "D:\Perl\apps\Hello\t"
Couldn't load helper "Catalyst::Helper::Model::DBIC", "Can't locate Catalyst/Helper/Model/DBIC.pm in @INC (@INC contains: D:\Perl\apps\Hello\lib D:/Perl/site/lib D:/Perl/lib .) at (eval 290) line 2.
"
コネクションを張るためにDBICというのが必要らしい。
そりゃそうか。

PS D:\Perl\apps\Hello> perl -MCPAN -e 'install Catalyst::Helper::Model::DBIC'
:
:
結構ながい・・・
:
:
Running make test
D:\Perl\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib\lib', 'blib\arch')" t/*.tt/01use.t ..........
# Failed test 'use Catalyst::Model::DBIC;'
t/01use.t .......... 1/2 # at t/01use.t line 4.
# Tried to use 'Catalyst::Model::DBIC'.
# Error: Can't locate DBIx/Class/Loader.pm in @INC (@INC contains: D:\Perl\cpan\build\Catalyst-Model-DBIC-0.17-2hstSj\inc D:\Perl\cpan\build\Catalyst-Model-DBIC-0.17-2hstSj\blib\lib D:\Perl\cpan\build\Catalyst-Model-DBIC-0.17-2hstSj\blib\arch D:/Perl/site/lib D:/Perl/lib .) at D:\Perl\cpan\build\Catalyst-Model-DBIC-0.17-2hstSj\blib\lib/Catalyst/Model/DBIC.pm line 8.
# BEGIN failed--compilation aborted at D:\Perl\cpan\build\Catalyst-Model-DBIC-0.17-2hstSj\blib\lib/Catalyst/Model/DBIC.pm line 8.
# Compilation failed in require at (eval 4) line 2.
# BEGIN failed--compilation aborted at (eval 4) line 2.

# Failed test 'use Catalyst::Helper::Model::DBIC;'
# at t/01use.t line 5.
# Tried to use 'Catalyst::Helper::Model::DBIC'.
# Error: Can't locate DBIx/Class/Loader.pm in @INC (@INC contains: D:\Perl\cpan\build\Catalyst-Model-DBIC-0.17-2hstSj\inc D:\Perl\cpan\build\Catalyst-Model-DBIC-0.17-2hstSj\blib\lib D:\Perl\cpan\build\Catalyst-Model-DBIC-0.17-2hstSj\blib\arch D:/Perl/site/lib D:/Perl/lib .) at D:\Perl\cpan\build\Catalyst-Model-DBIC-0.17-2hstSj\blib\lib/Catalyst/Helper/Model/DBIC.pm line 5.
# BEGIN failed--compilation aborted at D:\Perl\cpan\build\Catalyst-Model-DBIC-0.17-2hstSj\blib\lib/Catalyst/Helper/Model/DBIC.pm line 5.
# Compilation failed in require at (eval 231) line 2.
# BEGIN failed--compilation aborted at (eval 231) line 2.
# Looks like you failed 2 tests of 2.
t/01use.t .......... Dubious, test returned 2 (wstat 512, 0x200)
Failed 2/2 subtests
t/02pod.t .......... skipped: set TEST_POD to enable this test
t/03podcoverage.t .. skipped: set TEST_POD to enable this test

Test Summary Report

                                    • -

t/01use.t (Wstat: 512 Tests: 2 Failed: 2)
Failed tests: 1-2
Non-zero exit status: 2
Files=3, Tests=2, 1 wallclock secs ( 0.01 usr + 0.01 sys = 0.03 CPU)
Result: FAIL
Failed 1/3 test programs. 2/2 subtests failed.
dmake.exe: Error code 255, while making 'test_dynamic'
BRICAS/Catalyst-Model-DBIC-0.17.tar.gz
D:\Perl\site\bin\dmake.exe test -- NOT OK
//hint// to see the cpan-testers results for installing this module, try:
reports BRICAS/Catalyst-Model-DBIC-0.17.tar.gz
Running make install
make test had returned bad status, won't install without force

ん?テスト失敗してる。

PS D:\Perl\apps\Hello> perl -MCPAN -e 'install DBIx::Class::Loader'
とか
PS D:\Perl\apps\Hello> perl -MCPAN -e 'install Catalyst::Helper::Model::DBIC'
をやったがインストールできない。
小一時間程悩む。

Catalyst::Helper::Model::DBIC のインストールログに下記の記述を発見。


CPAN.pm: Going to build B/BR/BRICAS/Catalyst-Model-DBIC-0.17.tar.gz

Set up gcc environment - 3.4.5 (mingw-vista special r3)
Cannot determine perl version info from lib/Catalyst/Model/DBIC.pm

                                                                                                      • -

This module has been deprecated. You should be using
Catalyst::Model::DBIC::Schema instead.

                                                                                                      • -

Checking if your kit is complete...
Looks good

ありゃりゃ。
Catalyst::Model::DBIC::Schema をインストール。

PS D:\Perl\apps\Hello> perl -MCPAN -e 'Catalyst::Model::DBIC::Schema'

できたようだorz

気をとりなおして、.\script\hello_create.pl の構文を確認すると、

D:\Perl\apps\Hello>.\script\hello_create.pl
Usage:
hello_create.pl [options] model|view|controller name [helper] [options]

Options:
--force don't create a .new file where a file to be created exists

--mechanize use Test::WWW::Mechanize::Catalyst for tests if available
--help display this help and exits

Examples:
hello_create.pl controller My::Controller
hello_create.pl -mechanize controller My::Controller
hello_create.pl view My::View
hello_create.pl view HTML TT
hello_create.pl model My::Model
hello_create.pl model SomeDB DBIC::Schema MyApp::Schema create=dynamic\
dbi:SQLite:/tmp/my.db
hello_create.pl model AnotherDB DBIC::Schema MyApp::Schema create=static\

[Loader opts like db_schema, naming] dbi:Pg:dbname=foo root 4321
[connect_info opts like quote_char, name_sep]

See also:
perldoc Catalyst::Manual
perldoc Catalyst::Manual::Intro
perldoc Catalyst::Helper::Model::DBIC::Schema
perldoc Catalyst::Model::DBIC::Schema
perldoc Catalyst::View::TT

オプションの設定が違っていたorz

D:\Perl\apps\Hello>.\script\hello_create.pl model Hello DBIC::Schema Hello::Schema db:SQLite:/Perl/apps/Hello/Hello.db
exists "D:\Perl\apps\Hello\lib\Hello\Model"
exists "D:\Perl\apps\Hello\t"
exists "D:\Perl\apps\Hello\lib\Hello\Model\Hello.pm"
created "D:\Perl\apps\Hello\lib\Hello\Model\Hello.pm.new"
exists "D:\Perl\apps\Hello\t\model_Hello.t"
created "D:\Perl\apps\Hello\t\model_Hello.t.new"
model はできた。