Catalyst 5.7001まとめ
CPAN http://search.cpan.org/
Catalyst Runtime 5.7001 http://search.cpan.org/author/MRAMBERG/Catalyst-Runtime-5.7001/lib/Catalyst.pm
Catalyst Devel 1.0 http://search.cpan.org/author/MRAMBERG/Catalyst-Devel-1.00/lib/Catalyst/Devel.pm
最近のバージョンはCatalyst-RuntimeとCatalyst-Develの二つに分かれていて、Runtimeだけのインストールで実行環境は整うようだ(たぶん)。 もちろんDevel環境が無いとCatalystの意味がないんだけど。
以前の主流?は Catalyst+Template-Toolkit+Class::DBIといったかんじですが、現在はDBI::Classとなってます。 あと細々した部分が微妙にかわってたりする。ディレクトリのContoroller、Model,ViewがM,V,Cと短縮されてたりします。
インストールから開始まで
インストールはCPANから、RPMとかでもできるんですかね?そのへんよくわからない。 インストールが終わったら。ヘルパースクリプト(scriptにあるやつ)でアプリケーションのスケルトンを作っていく感じになる。
ちなみに以前のCatalystバージョンで作ったヘルパーとかは、新しいCatalystで -forceとかつければバージョンアップできる。
To upgrade your app to a new version of Catalyst: catalyst.pl -force -scripts MyApp
それでは早速Appを作成する。
# catalyst.pl myapp created "myapp" created "myapp/script" created "myapp/lib" created "myapp/root" created "myapp/root/static" created "myapp/root/static/images" created "myapp/t" created "myapp/lib/myapp" created "myapp/lib/myapp/Model" created "myapp/lib/myapp/View" created "myapp/lib/myapp/Controller" created "myapp/myapp.yml" created "myapp/lib/myapp.pm" created "myapp/lib/myapp/Controller/Root.pm" created "myapp/README" created "myapp/Changes" created "myapp/t/01app.t" created "myapp/t/02pod.t" created "myapp/t/03podcoverage.t" created "myapp/root/static/images/catalyst_logo.png" created "myapp/root/static/images/btn_120x50_built.png" created "myapp/root/static/images/btn_120x50_built_shadow.png" created "myapp/root/static/images/btn_120x50_powered.png" created "myapp/root/static/images/btn_120x50_powered_shadow.png" created "myapp/root/static/images/btn_88x31_built.png" created "myapp/root/static/images/btn_88x31_built_shadow.png" created "myapp/root/static/images/btn_88x31_powered.png" created "myapp/root/static/images/btn_88x31_powered_shadow.png" created "myapp/root/favicon.ico" created "myapp/Makefile.PL" created "myapp/script/myapp_cgi.pl" created "myapp/script/myapp_fastcgi.pl" created "myapp/script/myapp_server.pl" created "myapp/script/myapp_test.pl" created "myapp/script/myapp_create.pl"
/scriptにはヘルパーとテストサーバー、/tにはテスト /libにはCatalystアプリとなる。
自分がはまった関係でメモ。Catalyst-Runtime、DevelだけバージョンアップしてもCatalyst::Helperはバージョンアップされないのだ。
Catalyst::HelperのCPANからバージョンアップしておくこと。
(エラーでるから気づくけど)
created "myapp/script/myapp_cgi.pl" CGIで動かす場合
created "myapp/script/myapp_fastcgi.pl" FastCGI用
created "myapp/script/myapp_server.pl" テストサーバー
created "myapp/script/myapp_test.pl" テスト
created "myapp/script/myapp_create.pl" スケルトン作成ヘルパー
Helper create
# script/myapp_create.pl -help Usage: create.pl [options] model|view|controller name [helper] [options] Options: -help display this help and exits Examples: create.pl controller My::Controller create.pl view My::View create.pl view MyView TT create.pl view TT TT create.pl model My::Model create.pl model SomeDB CDBI dbi:SQLite:/tmp/my.db create.pl model AnotherDB CDBI dbi:Pg:dbname=foo root 4321 See also: perldoc Catalyst::Manual perldoc Catalyst::Manual::Intro
Modelの作成
# script/myapp_create.pl model Database DBIC DBI:mysql:testapp_db mysqluser password
こんなかんじでModel作成。 この場合Modelディレクトリの下にDatabaseをつくって、testapp_dbにあるテーブルを読み込んでModelスケルトンを作ってくれます。 便利。 テーブルが増えたらまたやればOK。
Viewの作成
# script/myapp_create.pl view TT TT
上の例はTemplate-Toolkitを使う場合。これでViewスケルトンをつくってくれる。
Templaet-Toolkitの設定はViewにあるTT.pmのconfigに書けばいい。
controllerの作成
# script/myapp_create.pl controller myapp
myapp_create.pl Ajaxってのもあるね。
myapp_create.pl controller myapp::hogeとするとさらにhogeディレクトリつくってhoge.pmつくってくれる。 Catalystは実行時にも下のディレクトリ(深いディレクトリ)から探して見てくれる。
テストサーバーの起動
script/myapp_server.plでテストサーバーが動く
# script/myapp_server.pl --help Usage: testup_server.pl [options] Options: -d -debug force debug mode -f -fork handle each request in a new process (defaults to false) -? -help display this help and exits -host host (defaults to all) -p -port port (defaults to 3000) -k -keepalive enable keep-alive connections -r -restart restart when files got modified (defaults to false) -rd -restartdelay delay between file checks -rr -restartregex regex match files that trigger a restart when modified (defaults to '\.yml$|\.yaml$|\.pm$') See also: perldoc Catalyst::Manual perldoc Catalyst::Manual::Intro
helperのcontrollerで作成されたlib/Controller/Root.pm
package myapp::Controller::Root; use strict; use warnings; use base 'Catalyst::Controller'; # # Sets the actions in this controller to be registered with no prefix # so they function identically to actions created in MyApp.pm # __PACKAGE__->config->{namespace} = ''; =head1 NAME myapp::Controller::Root - Root Controller for this Catalyst based application =head1 SYNOPSIS See L<testup>. =head1 DESCRIPTION Root Controller for this Catalyst based application. =head1 METHODS =cut =head2 default =cut # # Output a friendly welcome message # sub default : Private { my ( $self, $c ) = @_; # Hello World $c->response->body( $c->welcome_message ); } # # Uncomment and modify this end action after adding a View component # #=head2 end # #=cut # #sub end : Private { # my ( $self, $c ) = @_; # # # Forward to View unless response body is already defined # $c->forward( $c->view('') ) unless $c->response->body; #} =head1 AUTHOR root =head1 LICENSE This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself. =cut
かなり古い(去年ぐらい)のCatalystだとRoot.pmは作られませんが、最近のだとRoot.pmを作成します。 主にRoot.pmにアクションを書いていく。 この場合sub default : Private にはCatalystのロゴがはいったデフォルトページが表示されるように書いてある。
$c->response->body( $c->welcome_message );
このあたりも最近の書き方っぽい。
http://search.cpan.org/~mramberg/Catalyst-Runtime-5.7001/lib/Catalyst.pm
最低限このあたりを読んでおけばだいたい、何ができるかとかがわかるとおもう。(ちゃんとみないでOPENでファイル書きだししたりしてたし・・) Pluginの豊富さもCatalystの魅力のうちだからCPANを検索しまくっていろいろ入れて遊んでみよう。
Helperがあるから簡単にアプリ作れるので、テストアプリを作って徹底的に遊んでみるのも良さそう。(こういう環境にはemacs+ange-ftpで決まりだね!)