Amon2チュートリアルをやった
Amon2のチュートリアルをやっていく
http://amon.64p.org/bbs_tutorial.html
Tutorial - Create BBS siteとのこと。
まずperlbrewでデフォルトで5.16.0を使うようにする
perlbrew useだとログアウトするとなかったことになっちゃうのか。rbenvと微妙に挙動が違う。
ので、同じような感じになるperlbrew switchを使って設定します
$ perlbrew switch perl-5.16.0
まずスケルトンを作ります
$ amon2-setup.pl BBS -- Running flavor: Basic -- [Flavor::Basic] Loading asset: jQuery [Flavor::Basic] Loading asset: Bootstrap [Flavor::Minimum] writing lib/BBS.pm [Flavor::Basic] writing tmpl/index.tt [Flavor::Basic] writing tmpl/include/layout.tt [Flavor::Basic] writing tmpl/include/pager.tt [Flavor::Basic] writing lib/BBS/Web.pm [Flavor::Basic] writing lib/BBS/Web/Dispatcher.pm ...(省略)
依存モジュールを入れます
$ cd ./BBS $ cpanm --notest --installdeps .
cpanm --installdepsで、Makefile.PLに記載されている依存モジュールをインストール出来るっぽい。
掲示板用のschema追加
$ vi ./sql/sqlite.sql CREATE TABLE IF NOT EXISTS entry ( entry_id INTEGER NOT NULL PRIMARY KEY, body varchar(255) not null );
とりあえずここまでで起動してみる
$ pwd ./BBS $ plackup HTTP::Server::PSGI: Accepting connections at http://0:5000/
コントローラー編集
lib/BBS/Web/Dispatcher.pm を編集します
package BBS::Web::Dispatcher; use strict; use warnings; use Amon2::Web::Dispatcher::Lite; any '/' => sub { my ($c) = @_; my @entries = @{$c->dbh->selectall_arrayref( q{SELECT * FROM entry ORDER BY entry_id DESC LIMIT 10}, {Slice => {}} )}; return $c->render( "index.tt" => { entries => \@entries, } ); }; post '/post' => sub { my ($c) = @_; if (my $body = $c->req->param('body')) { $c->dbh->insert(entry => +{ body => $body, }); } return $c->redirect('/'); }; 1;
ビューの編集
tmpl/index.ttを編集します
[% WRAPPER 'include/layout.tt' %] <form method="post" action="[% uri_for('/post') %]"]]> <input type="text" name="body" /> <input type="submit" value="Send" /> </form> <ul> [% FOR entry IN entries %] <li>[% entry.entry_id %]. [% entry.body %]</li]]> [% END %] </ul]]> [% END %]
編集したのでplackupしてみます
$ plackup
なんか1行BBSっぽいものが動くようになった。
思ったこと
- cartonって依存モジュールを全部カレントディレクトリの下の./localに持ってきちゃうのか。bundleだと基本的にはシステムの指定のバージョンのものを参照、なかったらシステムにインストールされるみたいになってるので、すでにインストール済みのモジュール(+バージョン)だと一瞬でセットアップできて良い。
たとえばこの記事の最後の状態で、
$ mkdir ./test $ cp ./BBS/Makefile.PL ./test/ $ cp ./BBS/MYMETA.* ./test/ $ cd ./test $ carton install
ってやると結構時間かかる。