Hatena::Groupangelos

Angelos in Action RSSフィード

Fork me on GitHub
 | 

2009-10-03

Angelosの内部実装もPlackX::Engineベースに

06:50 | Angelosの内部実装もPlackX::Engineベースに - Angelos in Action を含むブックマーク はてなブックマーク - Angelosの内部実装もPlackX::Engineベースに - Angelos in Action Angelosの内部実装もPlackX::Engineベースに - Angelos in Action のブックマークコメント

Angelosの内部実装もPlackX::Engineベースに置き換えました。

req/resでの抽象化とmiddlewareのラップ処理を隠蔽したので、大分すっきりした形に。また、以前書いていたHTTP::EngineでRequestクラスをWAFの作ったリクエストクラスに置き換えたいなぁといってたのもできるようになりました。

sub build_engine {
    my $self = shift;

    my $request_handler = $self->build_request_handler;
    my $engine = PlackX::Engine->new(
        {   server => {
                module => $self->server,
                args   => {
                    port => $self->port,
                    host => $self->host,
                },
            },
            request_handler => $request_handler,
            request_class   => 'Angelos::Request',
            middlewares => [],
        }
    );
    return $engine;
}

sub build_request_handler {
    my $self = shift;
    return $self->request_handler if $self->request_handler;
    return sub { my $req = shift; $self->handle_request($req) }
}

plackup

plackupがあるのだから、PlackX::EngineでServer実装選択する部分をもつ必要はないんじゃないか?という話はあるんですが、ここは少し悩んでます。

WAF側では、開発モードやproductionモードなどに応じて、WAF用のconfigなどを渡してPlack::Builderでつくるpsgiのhandlerを 作れるようにする必要があるので、今のplackupをそのまんま使うべきなのかが難しいところだなぁと。

なので、waf用のconfigをわたせるplackupのようなものを作って、

 wafplackup --config waf.conf

として、configにはmiddlewareの設定とかを書くようにするにして起動するのかなぁとか。こうすれば、server実装の選択部分はwafprackupのほうにもっていけるから素直で、PlackX::Engineは実際のところいらないかもなぁとか。ライブラリとしてはpsgiファイルがなくても実行できるようにというのを考えてserver実装の選択部分もいれてはいるんですが、WAFの中で使う分にはいらないなぁともおもいつつ。


# スクリプトの名前はscript/serverとなるんですが。

 |