キモブロ

Please spy check please, Fucking retard

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
...(省略)

ログを見る感じ、jQueryTwitter Bootstrapがデフォルトで有効なのは良い感じ。

依存モジュールを入れます

$ 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

ってやると結構時間かかる。