Amon2を試そう
はじめる
えい。
% cpanm Amon2 [~/project] --> Working on Amon2 Fetching http://search.cpan.org/CPAN/authors/id/T/TO/TOKUHIROM/Amon2-2.29.tar.gz ... OK Configuring Amon2-2.29 ... OK Building and testing Amon2-2.29 ... FAIL ! Installing Amon2 failed. See /Users/okamura/.cpanm/build.log for details.
おふ。FAILになった。最終行に書いてあるとおりログを見ましょう。
% cat /Users/okamura/.cpanm/build.log [~/project] ... Error while loading DeepNamespace.psgi: Can't locate Tiffany.pm in @INC (@INC contains: /Users/okamura/.cpanm/work/1299473245.4343/Amon2-2.29/t/apps/DeepNamespace/lib /Users/okamura/.cpanm/work/1299473245.4343/Amon2-2.29/t/../lib /Users/okamura/.cpanm/work/1299473245.4343/Amon2-2.29/inc /Users/okamura/.cpanm/work/1299473245.4343/Amon2-2.29/blib/lib /Users/okamura/.cpanm/work/1299473245.4343/Amon2-2.29/blib/arch /Users/okamura/project/Shaq/lib /Users/okamura/project/Sid/lib /Users/okamura/project/CI/lib /Users/okamura/project/Acme-Porn-JP/lib /Users/okamura/project/Foxy/lib /Users/okamura/project/Groonga-Client/lib /Users/okamura/project/Test-Groonga/lib /Users/okamura/project/Shaq/lib /Users/okamura/project/Sid/lib /Users/okamura/project/CI/lib /Users/okamura/project/Acme-Porn-JP/lib /Users/okamura/project/Foxy/lib /Users/okamura/project/Groonga-Client/lib /Users/okamura/project/Test-Groonga/lib /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/site_perl/5.12.2/darwin-2level /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/site_perl/5.12.2 /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/5.12.2/darwin-2level /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/5.12.2 .) at /Users/okamura/.cpanm/work/1299473245.4343/Amon2-2.29/t/apps/DeepNamespace/lib/DeepNamespace/Web/User.pm line 4. ...
とりあえず、上記のログを発見。Tiffany.pmがみつからないらしい。
さっそくinstallしておきましょう。
% cpanm Tiffany [~/project] --> Working on Tiffany Fetching http://search.cpan.org/CPAN/authors/id/T/TO/TOKUHIROM/Tiffany-0.04.tar.gz ... OK Configuring Tiffany-0.04 ... OK Building and testing Tiffany-0.04 ... OK Successfully installed Tiffany-0.04
Tiffanyって何?
インターフェースのごちゃごちゃをすっきりさせた人がいるからみんなもそれを使えばいい、という事らしい。
もういちどAmonをinstall
% cpanm Amon2 [~/project] --> Working on Amon2 Fetching http://search.cpan.org/CPAN/authors/id/T/TO/TOKUHIROM/Amon2-2.29.tar.gz ... OK Configuring Amon2-2.29 ... OK Building and testing Amon2-2.29 ... FAIL ! Installing Amon2 failed. See /Users/okamura/.cpanm/build.log for details.
あらやだ。もう一度ログを見ましょう。
% cat /Users/okamura/.cpanm/build.log ... t/300_setup/01_minimum.t ................... ok Complex regular subexpression recursion limit (32766) exceeded at /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/site_perl/5.12.2/darwin-2level/Text/Xslate/Parser.pm line 635. Text::Xslate::Syntax::Kolon: Unknown operator '"', near print_raw, while parsing templates (<string>:16) at /Users/okamura/.cpanm/work/1299475209.5388/Amon2-2.29/blib/lib/Amon2/Setup/Flavor.pm line 58 ---------------------------------------------------------------------------- */ t/300_setup/01_minimum.t ................... ok Complex regular subexpression recursion limit (32766) exceeded at /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/site_perl/5.12.2/darwin-2level/Text/Xslate/Parser.pm line 635. Text::Xslate::Syntax::Kolon: Unknown operator '"', near print_raw, while parsing templates (<string>:16) at /Users/okamura/.cpanm/work/1299475209.5388/Amon2-2.29/blib/lib/Amon2/Setup/Flavor.pm line 58 ---------------------------------------------------------------------------- */ ...
t/300_setup/02_basic.tがどうやらこけておるらしい。
エラーの文面からText::Xslate側の問題に見えたのでUpgradeしてみる
% cpanm Text::Xslate --> Working on Text::Xslate Fetching http://search.cpan.org/CPAN/authors/id/G/GF/GFUJI/Text-Xslate-1.0012.tar.gz ... OK Configuring Text-Xslate-1.0012 ... OK Building and testing Text-Xslate-1.0012 ... OK Successfully installed Text-Xslate-1.0012 (upgraded from 1.0002)
ほんでもって
% cpanm Amon2 [~/project] --> Working on Amon2 Fetching http://search.cpan.org/CPAN/authors/id/T/TO/TOKUHIROM/Amon2-2.29.tar.gz ... OK Configuring Amon2-2.29 ... OK Building and testing Amon2-2.29 ... OK Successfully installed Amon2-2.29
OK。Text::Xslateのバージョンがいつだったのか調べておけばよかったかな?まあいいや。
スケルトンをつくろう
CPANモジュールにはlibだけでなく便利なscriptを同梱しているものが存在します。で、Amonをインストールすると次のようなコマンドがついてきます。
% which amon2-setup.pl [~/project] /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/bin/amon2-setup.pl
PATHがとおっているので次のように実行します。
% cd ~/project % amon2-setup.pl --dispatcher=Lite BBS [~/project] Unknown option: dispatcher Usage: % amon-setup.pl MyApp
あ、あれ。じゃあこう?
% amon-setup.pl BBS writing lib/BBS.pm writing lib/BBS/Web.pm writing tmpl/index.tt writing BBS.psgi writing Makefile.PL writing t/00_compile.t writing t/Util.pm writing t/01_root.t writing t/02_mech.t writing xt/03_pod.t mkpath: htdocs/static/img/ mkpath: htdocs/static/js/ writing lib/BBS.pm writing lib/BBS/Web.pm writing lib/BBS/Web/Dispatcher.pm writing config/development.pl writing config/test.pl writing lib/BBS/ConfigLoader.pm writing sql/my.sql writing sql/sqlite3.sql writing tmpl/index.tt writing tmpl/include/layout.tt writing htdocs/static/js/jquery-1.5.1.min.js writing htdocs/static/css/blueprint/screen.css writing htdocs/static/css/blueprint/print.css writing htdocs/static/css/blueprint/ie.css writing htdocs/static/css/main.css writing t/00_compile.t writing xt/02_perlcritic.t writing .gitignore
プロジェクト完成。移動
% cd BBS
ということでなんにもしてないのに大分できました。省略
この仕組みをつくった人の手間は++。でも使う人の手間は--。
ありがとうございます。ごちそうさまです。
DB作成
% echo 'create table entry ( [~/project/BBS] entry_id INTEGER NOT NULL PRIMARY KEY, body varchar(255) not null );' >> sql/sqlite3.sql
% sqlite3 development.db < sql/sqlite3.sql
development.dbという名前にしているのはデフォルトでそういう命名規則である事を期待しているから。
% cat config/development.pl [~/project/BBS] +{ 'DBI' => [ 'dbi:SQLite:dbname=development.db', '', '', +{ sqlite_unicode => 1, } ], 'Text::Xslate' => +{ }, };
動かす
% cd ~/project/BBS % plackup BBS.psgi HTTP::Server::PSGI: Accepting connections at http://0:5000/
hello, Amon2 world!って表示されると思います。
headerタグの記述がされつつドキュメント宣言がXHTML1.0移行型なのはCSS hackの一種?最近のCSS良く知らない。
Can't locate Amon2/Plugin/DBI.pm
マニュアル通りに進んでみてもう一度plackup
% plackup -r BBS.psgi [~/project/BBS] Watching ./lib BBS.psgi for file updates. Error while loading BBS.psgi: Can't locate Amon2/Plugin/DBI.pm in @INC (@INC contains: lib extlib/lib/perl5 /Users/okamura/project/Shaq/lib /Users/okamura/project/Sid/lib /Users/okamura/project/CI/lib /Users/okamura/project/Acme-Porn-JP/lib /Users/okamura/project/Foxy/lib /Users/okamura/project/Groonga-Client/lib /Users/okamura/project/Test-Groonga/lib /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/site_perl/5.12.2/darwin-2level /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/site_perl/5.12.2 /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/5.12.2/darwin-2level /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/5.12.2 .) at /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/site_perl/5.12.2/Plack/Util.pm line 22. Compilation failed in require at /Users/okamura/perl5/perlbrew/perls/perl-5.12.2/lib/5.12.2/parent.pm line 20. BEGIN failed--compilation aborted at lib/BBS/Web.pm line 4. Compilation failed in require at BBS.psgi line 5. BEGIN failed--compilation aborted at BBS.psgi line 5.
おっと、 Amon2/Plugin/DBI.pmは別パーツ?
% cpanm Amon2/Plugin/DBI.pm [~/project/BBS] --> Working on Amon2::Plugin::DBI Fetching http://search.cpan.org/CPAN/authors/id/T/TO/TOKUHIROM/Amon2-DBI-0.03.tar.gz ... OK Configuring Amon2-DBI-0.03 ... OK ==> Found dependencies: SQL::Interp, DBIx::TransactionManager, Carp::Clan --> Working on SQL::Interp Fetching http://search.cpan.org/CPAN/authors/id/M/MA/MARKSTOS/SQL-Interp-1.10.tar.gz ... OK Configuring SQL-Interp-1.10 ... OK Building and testing SQL-Interp-1.10 ... OK Successfully installed SQL-Interp-1.10 --> Working on DBIx::TransactionManager Fetching http://search.cpan.org/CPAN/authors/id/D/DM/DMAKI/DBIx-TransactionManager-1.09.tar.gz ... OK Configuring DBIx-TransactionManager-1.09 ... OK Building and testing DBIx-TransactionManager-1.09 ... OK Successfully installed DBIx-TransactionManager-1.09 --> Working on Carp::Clan Fetching http://search.cpan.org/CPAN/authors/id/S/ST/STBEY/Carp-Clan-6.04.tar.gz ... OK Configuring Carp-Clan-6.04 ... OK Building and testing Carp-Clan-6.04 ... OK Successfully installed Carp-Clan-6.04 Building and testing Amon2-DBI-0.03 ... OK Successfully installed Amon2-DBI-0.03
もう一度再起動させる
plackup -r BBS.psgi [~/project/BBS] Watching ./lib BBS.psgi for file updates. HTTP::Server::PSGI: Accepting connections at http://0:5000/
できた。
感想
チュートリアルしかやってないのですが、ここではBBS::Web::DispatcherでWeb::Controller的な処理を済ませてしまってるのが印象的。
CLIの処理を書くのにAmon2::Plugin::*はいっぱい参考になるところがある予感。
つぎはRuby on Railsとか他の言語も試してみよう。