WEB+DB PRESS Vol.32 の Catalyst 入門記事のメモ
2006-04-24-1
[Programming]
WEB+DB PRESS Vol.32 の id:naoya さんの書いた Catalyst 入門記事の
インストラクションに従って実行してみたメモ。
■WEB+DB PRESS Vol.32
記事では Catalyst 5.65 だそうだが、インストールしてみたら、
Catalyst 5.67 であった。すでに記事の内容と異なる箇所もあり、
開発の速さを感じた。
そのまま書いてある通りにやれば簡単に追体験できるかと思いきや、
かなり時間がかかった。なかなか手ごわいな、Catalyst。
■インストール
本文にも書いてあったが、すごく時間がかかる。ほんとに。
■動かしてみる
「Hello, World!」の表示を確認。嬉しい!
※なお、p.161のリスト1(MyApp.pm)は、v5.67 では default メソッドが
lib/MyApp/Controller/Root.pm に移っており、だいぶ様相が異なっている。
■コントローラの作成
「http://localhost:3000/foo/bar」
「http://localhost:3000/foo/baz」を確認。
■Template Toolkit でビュー
ブラウザで「http://localhost:3000/hello」を確認。
■モデルを作る
準備。
MySQLのデータ作成。
行末のセミコロンも抜けてた。)
ちょっと感動!
はまりメモ:
Catalyst の Catalyst::Helper::Model::CDBI でいつもハマる・・・orz
http://www.drk7.jp/MT/archives/001032.html
/usr/lib/perl5/site_perl/5.8.8/Class/DBI/Loader.pm
に「require Class::DBI;」を追加した。……。
雑感:
この記事、id:naoya さん以外に事前に通して実行した人いないのかな。
こういう記事って、モニターさん(詳しくない人ね)がたくさん必要かも。
インストラクションに従って実行してみたメモ。
■WEB+DB PRESS Vol.32
記事では Catalyst 5.65 だそうだが、インストールしてみたら、
Catalyst 5.67 であった。すでに記事の内容と異なる箇所もあり、
開発の速さを感じた。
そのまま書いてある通りにやれば簡単に追体験できるかと思いきや、
かなり時間がかかった。なかなか手ごわいな、Catalyst。
■インストール
本文にも書いてあったが、すごく時間がかかる。ほんとに。
% sudo perl -MCPAN -e 'install Task::Catalyst'
■動かしてみる
ブラウザで「http://localhost:3000/」にアクセスしてみる。ktkr!!!% catalyst.pl MyApp % cd MyApp % script/myapp_server.pl -r
ブラウザで「http://localhost:3000/hello」にアクセスし、% emacs lib/MyApp.pm (追加) sub hello : Local { my ($self, $c) = @_; $c->response->output('Hello, World!'); }
「Hello, World!」の表示を確認。嬉しい!
※なお、p.161のリスト1(MyApp.pm)は、v5.67 では default メソッドが
lib/MyApp/Controller/Root.pm に移っており、だいぶ様相が異なっている。
■コントローラの作成
ブラウザで「http://localhost:3000/foo」% script/myapp_create.pl controller Foo % emacs lib/MyApp/Controller/Foo.pm (追加) sub default : Private { my ( $self, $c ) = @_; $c->response->body('hello! /foo'); } sub bar : Local { my ( $self, $c ) = @_; $c->response->body('hello! /foo/bar'); } sub baz : Local { my ( $self, $c ) = @_; $c->response->body('hello! /foo/baz'); }
「http://localhost:3000/foo/bar」
「http://localhost:3000/foo/baz」を確認。
■Template Toolkit でビュー
% sudo perl -MCPAN -e 'install Catalyst::Helper' % sudo perl -MCPAN -e 'install Time::Piece'
(※p.164のソースでは「use Time::Piece;」がない。)% emacs myapp.yml (追加) View::TT: INCLUDE_PATH: - 'root/templates' TEMPLATE_EXTENSION: '.tt' % script/myapp_create.pl view TT TT % emacs lib/MyApp.pm (修正) use Time::Piece; sub hello : Local { my ($self, $c) = @_; $c->stash(now => Time::Piece->new); $c->forward($c->view('TT')); }
(※p.164のリスト4はheadタグが閉じられていない。)% mkdir root/templates % root/templates/hello.tt <html> <head><title>[% c.config.name %]</title></head> <body> <h1>[% c.config.name %]</h1> <p>Hello! [% now.year %]</p> </body> </html>
ブラウザで「http://localhost:3000/hello」を確認。
■モデルを作る
準備。
(※test通らなくても強引にインストールした。)% sudo perl -MCPAN -e 'install Catalyst::Helper::Model::CDBI' % sudo perl -MCPAN -e 'install Class::DBI' % sudo perl -MCPAN -e 'install Class::DBI::mysql' % sudo perl -MCPAN -e 'install DBD::mysql'
MySQLのデータ作成。
% mysql create database myapp; use myapp; create table entry ( id int unsigned auto_increment primary key, title varchar(255), body text, timestamp timestamp ); insert into entry values (NULL, 'Hello','This is a pen.', NOW()); insert into entry values (NULL, 'Bye','Sayonara!', NOW()); insert into entry values (NULL, 'Oreore','Ore dayo ore!', NOW());
(※タイポ:p.165のソースの「my $entres」→「my $entries」。% script/myapp_create.pl model CDBI CDBI dbi:mysql:myapp root % emacs myapp.yml (追加) Model::CDBI: dsn: 'dbi:mysql:dbname=myapp' password: '' user: 'root' % emacs lib/MyApp.pm (書き換え) sub hello : Local { my ($self, $c) = @_; my $entries = MyApp::Model::CDBI::Entry->retrieve_all; $c->stash(entries => $entries); $c->stash(now => Time::Piece->new); $c->forward($c->view('TT')); }
行末のセミコロンも抜けてた。)
ブラウザで「http://localhost:3000/hello」にアクセスする。% root/templates/hello.tt (追加) <dl> [% WHILE (entry = entries.next) %] <dt>[% entry.title %]</dt> <dd>[% entry.body %]</dd> [% END %] </dl>
ちょっと感動!
はまりメモ:
Catalyst の Catalyst::Helper::Model::CDBI でいつもハマる・・・orz
http://www.drk7.jp/MT/archives/001032.html
その2)Can't locate object method "set_sql" とエラーがでる同じ現象が起こったので drk7 さんのように、
/usr/lib/perl5/site_perl/5.8.8/Class/DBI/Loader.pm
に「require Class::DBI;」を追加した。……。
雑感:
この記事、id:naoya さん以外に事前に通して実行した人いないのかな。
こういう記事って、モニターさん(詳しくない人ね)がたくさん必要かも。