SQLite使った場合.DSNを指定するときは,dbi:SQLite:dbname=/full/path/to/database.dbってな感じでフルパスで指定しなきゃダメだよ!*1
CDBI使うときは,helper使って,
$ perl script/minimojo_create.pl model MyDB CDBI 'dbi:SQLite:dbname=/full/path/to/database.db'
とする.そのあと,設定のYAML(MyAppて名前のアプリケーションならmyapp.yml)に次のように書き加える.
Model::MyDB: dsn: 'dbi:SQLite:dbname=/full/path/to/database.db'
うえのhelperで作成されるエンティティのクラスの中をみると何の定義もないのに,きちんと動く.Class::DBI::Loaderを使って動的に生成してるだってさ.
CatalystではDBIx::Classが流行だったりするらしい.DBIx::Classで動的にクラスを作れるようなモデルを定義するには次にようにする.
$ perl script/minimojo_create.pl model MyDB DBIC::Schema MyDB::Schema create=dynamic 'dbi:SQLite:dbname=/full/path/to/database.db'
create=dynamicで動的に生成.だと思う:P
DBIx::Classにはfind_or_createなんていうメソッドもあるんだ.便利そうだなー.
*1:ハマった人