最近自炊に対する意識が異様に高いゆーすけべーです。さて、先日開催された Plack/PSGI Conference (shibuya.pl) 略して「 plackcon 」でも話しましたがMojoliciousはPSGIをサポートしているのでそのため立ち上げ方などに応用が効きます。かくいう僕もMojoliciousアプリをいくつかつくったり今でも運用していますが、大抵はPSGI経由で開発時は plackup
本番環境では Starlet
もしくは Starman
で立ち上げています。ってことでMojoliciousアプリの様々な立ち上げ方を紹介しましょう。
===
Mojolicious::Liteアプリの場合
SinatraライクなMojolicious::Liteアプリをつくるには mojo generate
を以下のように実行します。
$ mojo generate lite_app app.pl
その後、デフォルトチックに立ち上げるには生成したファイルに実行権限が付いているのでもうこれだけ。
$ ./app.pl daemon
そのままだと「3000番」ポートで起動するので変更したい場合は
$ ./app.pl daemon -l "http://*:5000"
としましょう。その他オプションについては ./app.pl daemon --help
で閲覧出来ます。
Liteアプリをplackupする
ではMojolicious::Liteのアプリをplackupしてみます。といっても何も細工は入りません。
$ plackup app.pl
するだけです!!なんとカジュアル。しかしこのままだと旨味がありません。PSGI経由で立ち上げるならば Plack::Middleware::* を使いたいですよね。Mojolicious::LiteアプリでPlackのMiddlewareを使うには以下のように書きます。試しに Plack::Middleware::Auth::Basic を使ってベーシック認証をかけてみましょう。
use Mojolicious::Lite;
use Plack::Builder;get '/' => sub { my $self = shift;
$self->render('index');
};
builder {
enable "Auth::Basic", authenticator => \&authen_cb;
app->start;
};
sub authen_cb {
my($username, $password, $env) = @_;
return $username eq 'mojo' && $password eq 'licious';
}
__DATA__
@@ index.html.ep
Hello!!
そして plackup
して http://localhost:5000/
などへアクセスしてみましょう。ベーシック認証のダイアログが出てくるはずです。わーい\(^o^)/
===
Mojoliciousアプリの場合
「Liteじゃない」普通のMojoliciousアプリをplackupする場合はもう .psgi
ファイルをつくっちゃうのが早いです。
use strict;
use warnings;
use Mojo::Server::PSGI;
use Plack::Builder;
use MyApp::Web;
my $psgi = Mojo::Server::PSGI->new( app => MyApp::Web->new );
my $app = $psgi->to_psgi_app;
builder {
…;
$app;
};
こんな感じのファイルをテンプレートにしてください。
===
まとめるとLiteアプリもしくは通常のMojoliciousアプリに関して、morboやスクリプト経由で立ち上げる Mojoliciousそのものがデフォルトで推奨するやり方 と plackup
などPSGI経由で行う方法があることが分かりました。Plack::Middleware::* が使える点とStarlet/Starmanが扱いやすく性能も高い点で後者を僕は選択しています。さてあなたはど・ち・ら?