既存の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のままでもいけるようにできるかな。
継続を使った数少ない実用的な例かも。