«前の日記(2004-07-22) 最新 次の日記(2004-07-24)» 編集

Matzにっき


2004-07-23 [長年日記]

_ [Ruby]既存の CGI をそのまま FastCGI 対応に

既存の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のままでもいけるようにできるかな。

継続を使った数少ない実用的な例かも。

本日のツッコミ(全1件) [ツッコミを入れる]
_ でんすけ (2004-07-25 09:28)

referer spam受けてます、最近パッケージ更新してからではないでしょうか。同様の被害を受けてるので。<br>(安全のため、読まれたらこのコメントはかくしておいた方がいいかも)

お名前:
E-mail:
コメント:
[]

«前の日記(2004-07-22) 最新 次の日記(2004-07-24)» 編集

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.