Amon2のチュートリアルをやってみた
最初はチュートリアルから
基本的なデータベースやルーティングなどを理解する意味でやってみる
手順
雛形を作成して必要なモジュールをインストールしておく
amon2-setup.pl BBS cd BBS/ carton install
sql/sqlite.sql を編集
CREATE TABLE IF NOT EXISTS member ( id INTEGER NOT NULL PRIMARY KEY, name VARCHAR(255) ); CREATE TABLE IF NOT EXISTS sessions ( id CHAR(72) PRIMARY KEY, session_data TEXT ); CREATE TABLE IF NOT EXISTS entry ( entry_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, body varchar(255) not null );
sqlを実行
sqlite3 db/development.db < sql/sqlite.sql
テーブルを確認
$ sqlite3 db/development.db SQLite version 3.6.20 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .tables entry member sessions sqlite>
config/development.pl で接続用の設定を追加
use File::Spec; use File::Basename qw(dirname); my $basedir = File::Spec->rel2abs(File::Spec->catdir(dirname(__FILE__), '..')); my $dbpath = File::Spec->catfile($basedir, 'db', 'development.db'); +{ 'DBI' => [ "dbi:SQLite:dbname=$dbpath", '', '', +{ sqlite_unicode => 1, } ], };
一度起動する
※hostは’0.0.0.0’にしておく
lib/BBS/DB/Schema.pmにテーブルなどの設定を追加
package BBS::DB::Schema; use strict; use warnings; use utf8; use Teng::Schema::Declare; base_row_class 'BBS::DB::Row'; table { name 'sessions'; pk 'id'; columns qw(session_data); }; table { name 'entry'; pk 'entry_id'; columns qw(entry_id body); }; 1;
lib/BBS/Web/Dispatcher.pmでルーティングの設定
package BBS::Web::Dispatcher; use strict; use warnings; use utf8; use Amon2::Web::Dispatcher::RouterBoom; any '/' => sub { my ($c) = @_; my @entries = $c->db->search( entry => { }, { order_by => 'entry_id DESC', limit => 10, } ); return $c->render( "index.tx" => { entries => \@entries, } ); }; post '/post' => sub { my ($c) = @_; if (my $body = $c->req->param('body')) { $c->db->insert( entry => +{ body => $body, } ); } return $c->redirect('/'); }; 1;
tmpl/index.txでテンプレートを編集
: cascade "include/layout.tx" : override content -> { <form method="post" action="<: uri_for('/post') :>"> <input type="text" name="body" /> <input type="submit" value="Send" /> </form> <ul> <: for $entries -> $entry { :> <li><: $entry.entry_id :>. <: $entry.body :></li> <: } :> </ul> : }
実行
参考
Tutorial - Create BBS site — Amon2 6.00 documentation
http://kimoto.hatenablog.com/entry/2012/07/26/144204
http://amagitakayosi.hatenablog.com/entry/2013/09/12/142900
Amon2 4.01でチュートリアル - マルシテイア
Amon2 Tutrialしてみる - 非開発者がプログラム技術を使ったQAを目指すブログ
Big Sky :: Amon2::LiteでとCPANモジュールで作る「Nopaste」チュートリアル
所感
よく勉強会とかではamon2で作った的なことを聞いていてMojoliciousで作ったようなことを聞いてみないのでやってみました。
まだ、チュートリアルだけなので実感がわかないけどamon2はいろいろなモジュールをたくさん使用している感じでMojolicousのように1つになっていないのでモジュールを使用する場合はcartonで制限したほうが動かすときに安全な感じがしました。
また、いろいろと触ってみて理解していこう
今日はここまで