Ark入門
PSGIにも対応しているモダンなWeb application frameworkであるArkに入門してみました。
まずはアプリの生成から
ark.pl newapp Happy::Wedding
これでModule::Setupをつかったフレーバーからアプリのひな形が生成されます。
続いて、Controllerをつくります。
ark.pl controller LoveArk
controllerも簡単に生成できます
Creating directory /Users/dann/.arkhelper/controller Creating directory /Users/dann/.arkhelper/controller/plugins Creating directory /Users/dann/.arkhelper/controller/flavors Creating /Users/dann/.arkhelper/controller/flavors/default/template/lib/____var-ark_app_path-var____/Controller/____var-ark_target_path-var____.pm Creating directory /Users/dann/.arkhelper/controller/flavors/default/additional Dump config /Users/dann/.arkhelper/controller/flavors/default/additional/config.yaml Creating directory /Users/dann/.arkhelper/controller/flavors/default/plugins Creating directory /Users/dann/.arkhelper/controller/flavors/default/template Dump config /Users/dann/.arkhelper/controller/flavors/default/config.yaml Creating directory . Creating lib/Happy/Wedding/Controller/LoveArk.pm
次はCatalystと同じようにルーティング設定をかいて、レスポンスを返すようにします。
package Happy::Wedding::Controller::LoveArk; use Ark 'Controller'; sub index :Path :Args(0) { my ($self, $c) = @_; $c->res->body('Happy Wedding'); } 1;
ここまできたら起動します。plackに対応しているので、以下のようにするだけで起動します。
plackup -app app.psgi
[debug] Loaded Path actions: .-------------------------------------+--------------------------------------. | Path | Private | +-------------------------------------+--------------------------------------+ | / | /index | | / | /default | | /loveark | /loveark/index | '-------------------------------------+--------------------------------------' [debug] Setup finished Accepting connections at http://0:5000/
おお、いいですね。
これで、http://localhost:5000/loveark にアクセスすると、さきほどコントローラに書いたHappy Weddingが表示されます。
おぉぉぉぉ。
ここまで作るにあたり、githubのHEADではMouse0.40では動作しないところがあったので、Arkのほうのパッチを作っておきました。
From 6f633d9ab5bffa5b1f369c36cae6aebbb318c88b Mon Sep 17 00:00:00 2001 From: Dann <techmemo@gmail.com> Date: Tue, 10 Nov 2009 02:23:30 +0900 Subject: [PATCH] remove make_immutable call because make_immutable method doesn't exist in latest Mouse::Role --- lib/Ark/Command/Flavor/Newapp.pm | 2 +- lib/Ark/Command/Interface.pm | 3 +-- lib/Ark/Command/Interface/ModuleSetup.pm | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/Ark/Command/Flavor/Newapp.pm b/lib/Ark/Command/Flavor/Newapp.pm index 9be7557..0db4fd1 100644 --- a/lib/Ark/Command/Flavor/Newapp.pm +++ b/lib/Ark/Command/Flavor/Newapp.pm @@ -32,7 +32,7 @@ template: | use [% module %]; - my $app = MyApp->new; + my $app = [% module %]->new; $app->setup; builder { diff --git a/lib/Ark/Command/Interface.pm b/lib/Ark/Command/Interface.pm index 113d418..5894795 100644 --- a/lib/Ark/Command/Interface.pm +++ b/lib/Ark/Command/Interface.pm @@ -85,5 +85,4 @@ sub search_app { $app; } -__PACKAGE__->meta->make_immutable; - +1; diff --git a/lib/Ark/Command/Interface/ModuleSetup.pm b/lib/Ark/Command/Interface/ModuleSetup.pm index f26a5b3..522ed50 100644 --- a/lib/Ark/Command/Interface/ModuleSetup.pm +++ b/lib/Ark/Command/Interface/ModuleSetup.pm @@ -58,4 +58,4 @@ sub run { } } -__PACKAGE__->meta->make_immutable; +1; -- 1.5.5.1
起動も軽く、とてもいい感じです。
週末のArkthonが楽しみですね。Happy hacking!
# gfxさんへ。Mouse側のバグではなくて、Ark側のバグかと。