FastCGI動いたー。

いやーPerlでは出来てたのに必死こいて調べても全然マニュアルも見つからないし、情報も出てこないしでみんなは平然と暮らしてるのにこんな基本的なことをわからないのは俺だけかと。久しぶりにコンピューター砂漠に取り残された気持ちになりました。

しょうがないからfcgi.rbのソース見ながら勘で書きました。

まとめ:

  • mod_fcgidとmod_fastcgiは別の物。でもFastCGIという仕様自体は共通のがある。
  • mod_fcgidを使った。
  • fcgi.rbってのが(*)最初から入ってる。
  • ruby-fcgi.rbはよくわからないので使わなかった。
  • fcgiとcgiは書き方が全然違う。

Hello, FastCGI:

#!/usr/bin/env ruby
require 'fcgi'

FCGI::each do |req|
  req.out.puts "Content-Type: text/plain\n\n" 
  req.out.puts "Hello, FastCGI" 
  req.finish
end

勘なのでこれであってるかわからない。

FCGI::eachに渡されるブロックがFastCGIとして実行されるプロセスって感じですかね。で、req(FCGI.Request)はApacheとやり取りするソケットになってると。なるほどなあ。 ただ、何でFCGI.Request#finishを呼ばないと動かないのかはわからない。

    class Request
      def initialize(id, env, stdin, stdout = nil, stderr = nil, data = nil)
        @id = id
        @env = env
        @in = stdin
        @out = stdout || StringIO.new
        @err = stderr || StringIO.new
        @data = data || StringIO.new
      end

      attr_reader :id
      attr_reader :env
      attr_reader :in
      attr_reader :out
      attr_reader :err
      attr_reader :data

      def finish   # <strong>for backword compatibility</strong>
      end
    end

fcgi.rb見るとfinishは空っぽなのになあ。

でもこれでRailsが良く分かんないけど動いてるというキモイ状態が少し解消されました。次はRackを試してみよう。

  • fcgi.rbは最初から入ってない。gemで入れようとすると入らないのでDebianのパッケージを利用する。
sudo apt-get install libfcgi-ruby1.8

Comments


Option