psgi と cgi の変換

とある管理サーバで一つの管理用cgiを動かさないといけないんだけど、httpdはinstallされていない。たかが1cgiのためだけにapache installするのもなんだかなー、と思って調べた。

本当は変換なんかしなくて、psgiアプリで書いてplackupすればいいんだろうけど、既存のcgiを使いまわしたかったので。

cgiplackで実行する

use Plack::App::WrapCGI;
my $app = Plack::App::WrapCGI->new(script => "/path/to/cgi")->to_app;

これをplackup app.psgi などで起動。ワンライナーでもいいけど。

特定URLでは静的ファイルを配信したいとき

miyagawaさんのgist。Plackk::Builder のmountを使って、urlによって処理をわける。

psgicgiとして実行する

遅くなるし特別な理由がないとしないと思うけど。ついでなので調べた。

cgiの中でPlack::Util::load_psgiというのを呼び出してあげれば良いのですね。簡単。

"任意の"cgiplackで実行する

これもついでで。

perl以外の(シェルスクリプトpythonなど)cgiplackで実行できると。おそるべし

$ plackup -MPlack::App::CGIBin -e 'Plack::App::CGIBin->new(root => "/path/to/cbi-bin/")->to_app'