PSGI
PSGIはPerl Web Server Gateway Interfaceの略です。
PSGIは、WebアプリケーションイとWebサーバのインタフェースの仕様です。
どういう仕様かというと下記のようなものです。
my $app = sub { my $env = shift; return [ 200, [ 'Content-Type' => 'text/plain' ], [ "Hello World" ], ]; };
アプリケーションは、関数リファレンスで表現されています(my $app = sub {};)。
関数リファレンスでは、$envで環境変数を受け取り、配列のリファレンスを返します。
返される配列リファレンスには、
ステータスコード(200)、
ヘッダを格納する配列リファレンス([ 'Content-Type' => 'text/plain' ])、
ボディを格納する配列リファレンス([ "Hello World" ])
の3要素が含まれています。
CGIで動かすときは、
use Plack::Handler::CGI; Plack::Handler::CGI->new->run($app);
と書けばよいです。
WebサーバのFCGIで動かすときは、
use Plack::Handler::FCGI; my $server = Plack::Handler::FCGI->new( nproc => $num_proc, listen => $listen, detach => 1, ); $server->run($app);
と書けばよいです。
このように、インターフェースがPSGIに従っていれば、
実行環境によってアプリケーション側でプログラムを書き換える必要がなくなります。
Plack
PlackはPSGIのユーティリティです。
cpan Plack
で、インストールできます。
Plackには、スタンドアロンPSGIサーバが付属しています。
my $app = sub { my $env = shift; return [ 200, [ 'Content-Type' => 'text/plain' ], [ "Hello World" ], ]; };
を、「hello.psgi」という名前で保存し、下記のコマンドでサーバを起動します。
plackup hello.psgi
起動すると、ブラウザで「http://localhost:5000」にアクセスできます。
すると、「Hello World」と表示されます。