2009/09/24

Recent entries from same category

  1. RapidJSON や simdjson よりも速いC言語から使えるJSONライブラリ「yyjson」
  2. コメントも扱える高機能な C++ 向け JSON パーサ「jsoncpp」
  3. C++ で flask ライクなウェブサーバ「clask」書いた。
  4. C++ 用 SQLite3 ORM 「sqlite_orm」が便利。
  5. zsh で PATH に相対パスを含んだ場合にコマンドが補完できないのは意図的かどうか。

apacheでperlを扱うなら、CGI/FCGI/mod_perlといった選択肢があるのですが、mod_perliteという軽量なapacheモジュールも存在します。
sodabrew's mod_perlite at master - GitHub

A lightweight Apache module for Perl scripts

http://github.com/sodabrew/mod_perlite/
mod_perlは結構複雑ですが、mod_perliteは仕組みも簡素で分かりやすく速度パフォーマンスもそこそこあるという代物になっています。

mod_perliteについてはhidekさんの紹介記事を見ていただくと分かるかと思います。実はこのmod_perlite、絶賛の声はあれどPOSTメソッドが動かないという重大なバグを持ったまま今日に至ります。
先日からWindows向けにportingしている最中にその事実に気づき、「ええぃどうせならPOST出来る様にしてしまえ!」とpatchを書いたのが今日の昼。githubでpull requestしたのでauthorの方が今頃吟味検討してmergeするかどうかを判断しておられる頃かと思います。
変更差分を見られたい方はこの辺で...

何個か動作確認を行い、blosxomMTOS(Movable Type Open Source)、Catalyst(CGI)、MENTAが動作するのは確認しました。
mod_perlite_blosxom

mod_perlite_catalyst

mod_perlite_mtos

mod_perlite_menta
ただし完璧に動作するという訳でもなく、mod_perliteは内部でperlスクリプトをrun_fileするという簡素な仕様が故に、perl内でシグナルハンドラを書き換えられてしまうと、勝手に終了されてしまうという問題があります。デフォルトだと標準出力されるように$SIG{__DIE__}、$SIG{__WARN__}を書き換えてあるのですが、高性能なWAFはだいたいそのWAF専用のエラー画面を持っていて、内部でシグナルハンドラを上書きしている事があります。この場合、run_fileしてるだけなのでhttpサーバごとダウンするという、とてもおちゃめな動きになります。

とりあえずPOSTが動くようになってWindowsでも動かせる様になったので残る大きな問題は、この$SIG問題だと認識しています。
この辺はおそらくtieを使えばクリア出来るんじゃないかと思ってます。
Posted at by | Edit