Catalystちょっとずつ

学校で最新LLフレームワークエクスプローラ Ruby on Rails, Maple/Ethna(PHP),Catalyst(Perl),TurboGears(Python) 5大フレームワーク徹底攻略を見つけて衝動買い.衝動ってこわいね.

ともかくはp164からのCatalystことはじめで基本を再度おさらいしてみる.p171あたりからのモデルの作成は,MySQL使ってるんだけど面倒なのでSQLiteでやった.

create table entry (
    id integer PRIMARY KEY autoincrement,
    title text,
    body text,
    timestamp text
);

insert into entry values (NULL, 'Hello', 'Hello, World!',CURRENT_TIMESTAMP);
insert into entry values (NULL, 'Good Bye', 'Good Bye, Farewell World!',CURRENT_TIMESTAMP);

こんなファイルを用意して

$ sqlite3 myapp.db < myapp.sql

としてデータベースを用意する.データベースファイルは,catalyst_root/dbに入れた.

さらにココからSQLite向けのモデルを作るのは次のような感じ.

$ perl script/myapp_create.pl model CDBI CDBI dbi:SQLite:db/myapp.db

となる.データベースファイルをフルパスで指定するようにしてタイポ治したら動いた.Catalystはなんも悪くないです.かなりごちゃごちゃ下のできちんとまとめるか…

しかし,これうまく動かないようなんだよな.Class::DBI::Loaderがうまく呼べてないのだろうか.ちょっと本日は調べきれなかった.DBIx::Classとかつかうとどうも大丈夫なようだけど.
追記: ともかくCatalyst抜きにClass::DBI::Loaderの動きを確認してみた.

$ cat cdbil.pl 
use strict;
use Class::DBI::Loader;
use Data::Dumper;

my $loader = Class::DBI::Loader->new(
    dsn       => "dbi:SQLite:dbname=/tmp/myapp.db",
    namespace => "Data",
);

my $class = $loader->find_class('entry');
my $obj = $class->retrieve(1);
print Dumper $obj;
print $obj->title;

$ perl cdbil.pl 
$VAR1 = bless( {
                 'id' => '1'
               }, 'Data::Entry' );
yohei

これは普通に動くようだし,単に設定Catalystの設定おかしいんじゃなかろうか

最新LLフレームワークエクスプローラ Ruby on Rails, Maple/Ethna(PHP),Catalyst(Perl),TurboGears(Python) 5大フレームワーク徹底攻略

最新LLフレームワークエクスプローラ Ruby on Rails, Maple/Ethna(PHP),Catalyst(Perl),TurboGears(Python) 5大フレームワーク徹底攻略