既存のCGIプログラムの修正を最低限にしてFastCGI対応にする方法について。
以前、こんなトリックを書いたことがあります。
require 'cgi' require 'fcgi.so' class CGI class Fast<CGI CONTINUATION = [] def Fast::new(*args) at_exit do if CONTINUATION[0] CONTINUATION[0].call end end callcc do |c| CONTINUATION[0] = c end fcgi = FCGI::accept unless fcgi CONTINUATION[0] = nil exit end $defout = fcgi.out super(*args) end end end
「require 'cgi'」を「require 'fcgi'」に変更し、 「CGI.new」を「CGI::Fast.new」に書き換えるだけで かなりのCGIがそのまま動作するのではないかと思います。
もうちょっと手を加えれば、CGI.newのままでもいけるようにできるかな。
継続を使った数少ない実用的な例かも。