psgiファイルをCGIで実行するために勉強
Arkの勉強をしようとサンプルいじりながらちょこっとずつ進めていたら、
さっそくエラーが出てしまってどこがおかしいのかわからず挫折しかかってたところに、
さくらレンタルサーバーで動くWebアプリをArkを使って作ってみた - すぎゃーんメモなんていう素敵なエントリーがあがってたのでもうちょい頑張ってみようと勉強してみようと思います。
で、その前に。
psgiファイルを「plackup app.psgi」でなくCGIで動かす方法知らなかったのですけど、
上の記事読んだらさくらのレンタルサーバーでArk+CGIのTwitterアプリを作る練習 - すぎゃーんメモにCGIで動かす方法が書いてあったので僕もさくらで試してみました。
まずpsgiの作成
Sunabaにあったhelloworldの中身を少し書き換えて以下のようなenv.psgiファイルを作りました。
use strict; use warnings; my $app = sub { my $env = shift; my $content = << "END_OF_HTML"; <ul> @{[ map { "<li>$_: $env->{$_}</li>" } keys %{$env} ]} </ul> END_OF_HTML [ 200, [ "Content-Type", "text/html" ], [ $content ] ]; };
$envの中身をliでリスト表示するだけのアプリ。
psgiを呼び出すCGIの作成
以下のようなenv.cgiファイルを作成。
#!/home/lesamoureuses/perl5/perlbrew/bin/perl use strict; use warnings; use Plack::Loader; my $app = Plack::Util::load_psgi("./env.psgi"); Plack::Loader->auto->run($app);
CGIからpsgiを呼び出すのは最後の3行みたいにやればいいみたい。
perldoc Plack::Handler::CGIにも例が書いてありました。
あと、あんまり関係ないけど、せっかくなのでこれを機にperlbrewに乗り換えてみました。
なのでシェバン行をperlbrew/bin/perlに。
perlbrewへの乗換えはとか新しいPerlに今まで使ってたモジュールをまとめてインストールする - 酒日記 はてな支店を参考にしました。
(ExtUtils::Installed->new(extra_libs=>\@INC)とかやったら大抵のモジュールはもってこれたみたい)
結果
CGIファイルに実行権限付けてブラウザから確認したらちゃんとリスト表示された!
おぉ。すごい。感動。
psgiの方もplackupで実行してみると見事に見れた。
[4:38@www292]% plackup env.psgi Plack::Server::Standalone: Accepting connections at http://0:5000/ 125.2.97.124 - - [30/ 7/2010 04:38:43] "GET /perl/plack/ HTTP/1.1" 200 1033 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; ja-JP-mac; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"
おぉ。すごい。
(さくらインターネットは5000番ポートが開いてるのですね。)
ということで、cgiからpsgiファイルを実行できました。