<p>FastCGI動いたー。</p>
<p>いやーPerlでは出来てたのに必死こいて調べても全然マニュアルも見つからないし、情報も出てこないしでみんなは平然と暮らしてるのにこんな基本的なことをわからないのは俺だけかと。久しぶりにコンピューター砂漠に取り残された気持ちになりました。</p>
<p>しょうがないからfcgi.rbのソース見ながら勘で書きました。</p>
<p>まとめ:</p>
<ul>
<li>mod_fcgidとmod_fastcgiは別の物。でもFastCGIという仕様自体は共通のがある。</li>
<li>mod_fcgidを使った。</li>
<li>fcgi.rbってのが(*)<s>最初から入ってる。</s></li>
<li>ruby-fcgi.rbはよくわからないので使わなかった。</li>
<li>fcgiとcgiは書き方が全然違う。</li>
</ul>
<p>Hello, FastCGI:</p>
<pre class="prettyprint"><code>#!/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</code></pre>
<p>勘なのでこれであってるかわからない。</p>
<p>FCGI::eachに渡されるブロックがFastCGIとして実行されるプロセスって感じですかね。で、req(FCGI.Request)はApacheとやり取りするソケットになってると。なるほどなあ。
ただ、何でFCGI.Request#finishを呼ばないと動かないのかはわからない。</p>
<pre class="prettyprint"><code> 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</code></pre>
<p>fcgi.rb見るとfinishは空っぽなのになあ。</p>
<p>でもこれでRailsが良く分かんないけど動いてるというキモイ状態が少し解消されました。次は<a href="http://rack.rubyforge.org/">Rack</a>を試してみよう。</p>
<ul>
<li>fcgi.rbは最初から入ってない。gemで入れようとすると入らないのでDebianのパッケージを利用する。</li>
</ul>
<pre class="prettyprint"><code>sudo apt-get install libfcgi-ruby1.8</code></pre>