spiritlooseのはてなダイアリー このページをアンテナに追加 RSSフィード

2009-10-09

[]mod_psgi 永続化、Windows対応、autoconf化など


mod_psgi の開発をぼちぼち進めてます。

mod_psgi が Perlインタプリタを永続化するようになりました

ブログには書いてなかったんですが、mod_perl のような方法で永続化するようになってます。

プロセス起動時に PSGIApp を全て do で読み込むようになっています。

ということで、mod_psgi での .psgi ファイルはアプリケーションの定義と、mod_perl での startup.pl のような効果があります。


Windowsに対応しました

mattnさんがやってくれました。すばらしいですね。


autoconf化しました

ということでインストール方法は

$ ./configure && make && sudo make install

になります。詳しくは README を参照してください。

今はパッケージングしたやつをリリースしてないので、最初にautoconfでconfigureを生成する必要があります。


で今後ですが、PSGI の SHOULD や MAY の部分で実装できてないところの実装(sendfile周りとか)とかをやって、落ち着いたら最適化などをやっていければいいなと思ってます。


あと、永続化方法はまだ検討していて、Passenger や mod_wsgi のような別デーモンを起動するような方法なども検討しています。

2009-10-02

[][] 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 ===