[PSGI入門でググって](https://www.google.co.jp/search?oe=UTF-8&ie=UTF-8&hl=ja&q=psgi 入門&gws_rd=ssl)も本当の導入だけで実用的な実装が なかなか見当たらなくて辛かったので、本記事でそのあたりをフォローしようと思います。
本記事の対象
- CGIの読み書きができる
- けど、Mojolicious使うにはためらいがある(私のような1)
- perl使い
必要な環境(というか本記事では記載しない準備運動)
PSGIを直接書くメリット
- 本番環境を用意するまではサーバー設定が不要4
- RoRだとかMVCだとかを理解してなくても自分のperlの知識だけで書ける
- HTTPレスポンスの構造を理解してなくてもかけてしまう5
- バイバイ(x)html4 &
use CGI
! ハロー!HTML5 &use Text::Xslate
! - バイバイ
use CGI::Carp
!エラーは自動で表示してくれる!
PSGIを直接書くデメリット
- ドキュメント少ねぇ!お前ら
”Hallo World!”
だけで終わらせすぎ! - デフォルトのセッション機能が弱い(個人の主観です)6
本日のお題:環境変数の一覧を出す。
ここまで執筆してスタミナ切れたので連載にします。今日のお題は環境変数の取得とその一覧の出力です。
use strict;
use warnings;
use Carp;
use Plack::App::Path::Router::PSGI;
use Path::Router;
use Plack::Request;
my $router = Path::Router->new;
$router->add_route( '/' => target => \&env );
# now create the Plack app
my $app = Plack::App::Path::Router::PSGI->new( router => $router );
$app->to_app();
# 以下routerで呼ばれる要素
sub env {
my $env = shift;
my @str;
while ( my ( $key, $value ) = each %$env ) {
push @str, "$key = $value" unless ref $value;
}
return response( $env,
join( "<br>\n", '<html><body><h1>環境変数一覧</h1>', sort(@str), '</body></html>')
);
}
# 以下サブルーチン
sub response {
my $env = shift;
my $body = shift || croak 'empty body!';
my %ARG = @_ if @_;
my $status = $ARG{'-status'} || 200;
croak "unvalid status: $status" if $status !~ /^\d{3}$/s;
my $mime = $ARG{'-MIME'} || 'text/html; charset=utf-8';
my $headers = $ARG{'-headers'} || {};
my $req = Plack::Request->new($env);
my $res = $req->new_response($status);
$res->content_type($mime);
$res->header( $headers );
$res->body($body);
$res->finalize;
}
__END__
として、$ plackup Myapp.pl -r
でおk7
どうだ!簡単だろ!? use Jcode;
もuse utf8;
もuse Encode;
も要らんですたい!
次章
PSGI入門第二章 CGI::SessionをPSGIで無理やり使う
宣伝
本記事は自前で有料WebサービスをPerlで書いてリリースするに辺り、つまづいた点や気づいたことを共有する目的で書き始めました。
こちらのQRコードをスマホで読み取り、
興味を持った方はhttps://qrown.meまでぜひお立ち寄りください!
-
web APIを実装するわけでもなく、ただ単にWebアプリケーションを構築したいだけだったり、RoRを触ったことなかったりしたらMojoliciousって敷居高くないですか? ↩
-
本番環境ではポート80を使うためにApache/nginxを止めて
sudo
を使うか素直にApache/nginxをリバースプロクシとして使う必要があるがplackup Myapp.pl
などとする場合にはデフォルトでポート5000を使うのでhttp://localhost:5000などとブラウザに打てば良い。 ↩ -
use Plack::Request;
またはuse Plack::Response;
しろ ↩ -
CGI::Sessionに依存してると
$session->expire(‘+1y’)
とか描きたくなるが、自前で実装しなくてはいけない ↩ -
-r
オプションはスクリプト本体と./lib
以下の変更を検知して自動的に再起動するオプション ↩