Edited at

Mojoliciousの様々な立ち上げ方

More than 5 years have passed since last update.

最近自炊に対する意識が異様に高いゆーすけべーです。さて、先日開催された 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が扱いやすく性能も高い点で後者を僕は選択しています。さてあなたはど・ち・ら?