<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 # &lt;strong&gt;for backword compatibility&lt;/strong&gt; 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>

Comments


Option