mod_psgi を実装してみた


http://github.com/spiritloose/mod_psgi

PSGI を実装したApache2モジュール。

% make && make install

でインストールできて、

LoadModule psgi_module modules/mod_psgi.so
<Location /psgi>
  SetHandler psgi
  PSGIApp /path/to/app.psgi
</Location>

で動く。


がーっと書いたのでまだまだの部分が多いとはおもうけど、一通り実装できたと思う。

Plack::Test::Suite を使ったテストも書いた。

http://github.com/spiritloose/mod_psgi/blob/master/t/suite.t


mod_perlのようにApacheの機能を提供する必要はなく、アプリケーションへはenvを渡せば
いいだけなので、実装は難しくない。

あとはそれ以外の部分をやっていければ。

Perlインタプリタの永続化とか。

あと、設定はmod_wsgiのように

PSGIScriptAlias /psgi /path/to/app.psgi

とかの方がいいのかしら。


mod_perlite については作ってる途中に気づいたんだけど、あれをPSGI対応にするにはほぼ書き直しになる
とおもったのでとりあえず作ってみることにした、という次第。

追記

miyagawaさんよりMac OS Xで以下のエラーでhttpdが起動しないとのこと。

Symbol not found: _PL_stack_sp
  Referenced from: /usr/libexec/apache2/mod_psgi.so
  Expected in: dynamic lookup

Mac OS X で動いた方がいらっしゃったら回避方法を教えていただけると助かります。

こちらの開発環境は以下の通りです。
ApachePerlはソースからビルドしたやつです。

$ uname -a
Linux debian 2.6.26-2-686 #1 SMP Wed Aug 19 06:06:52 UTC 2009 i686 GNU/Linux
$ cat /etc/debian_version
5.0.3
$ /usr/local/apache2/bin/httpd -v
Server version: Apache/2.2.10 (Unix)
Server built:   Nov 20 2008 11:31:51
$ /usr/local/bin/perl -v

This is perl, v5.10.1 (*) built for i686-linux
=== snip ===