Plack Advent Calendar Day 2


2日目:「世界の国からこんにちは」
http://advent.plackperl.org/2009/12/day-2-hello-world.html

さてチュートリアル序盤といえばhello Worldです。
その前に注意書きがあります。

Note: today’s code is written in a raw PSGI interface to understand what’s going on, but in reality you should never have to do this unless you’re a web application framework developer.
今日紹介するコードはPSGIを理解するためのわざとっぽいコードなので、実際はフレームワーク使うから、こんなことはしないんだぜ!

と、書いてある気がします。

さて本編です。どこでもいいのでhello.psgiというファイルを作ります。中身は以下。

my $app = sub {
    return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello World' ] ];
};

いきなりサブルーチンから書くようです。
Perlといえば#!/usr/bin/perl か package Hoge;だと思ってたので軽くカルチャーショックですね。
書けたら保存して。次のコマンドでPlackについてるらしいサーバを起動します。

> plackup hello.psgi
HTTP::Server::PSGI: Accepting connections at http://0:5000/

http://127.0.0.1:5000/でアクセスしましょうとのことですが、当方はリモートサーバだったのでhttp://hogehoge.com:5000で。

無事「Hello World」が表示されました!
次に、ちょっとちがうことも!

my $app = sub {
    my $env = shift;
    return [
        200,
        ['Content-Type' => 'text/plain'],
        [ "Hello stranger from $env->{REMOTE_ADDR}!"],
    ];
};

どうやらデフォルトで、環境変数をハッシュで受け取るようです。

my $app = sub {
    my $env = shift;
    if ($env->{PATH_INFO} eq '/favicon.ico') {
        open my $fh, "<:raw", "/path/to/favicon.ico" or die $!;
        return [ 200, ['Content-Type' => 'image/x-icon'], $fh ];
    } elsif ($env->{PATH_INFO} eq '/') {
        return [ 200, ['Content-Type' => 'text/plain'], [ "Hello again" ] ];
    } else {
        return [ 404, ['Content-Type' => 'text/html'], [ '404 Not Found' ] ];
    }
};

request pathで振り分け。ファイルハンドルをレスポンスにつかえるし、正しいステータスコードも返せますよ!ということらしいです(たぶん)

ふぅ。Day 3につづくんじゃよ。

,

  1. No comments yet.
(will not be published)