今月から仕事でRubyをやり始めたんですが、FastCGIがまったくわからない。

現在分かっている(と思っている)こと:

  • 普通のCGIは動く
  • FastCGIはプログラムをApacheとは別プロセスで立ち上げっぱにしてSocket経由で通信するもの(?)

わからないこと:

  • Debianの場合、libapache2-mod-fastcgiとlibapache2-mod-fcgidと二つあるけど何か違うのか。
  • fcgi、FastCGI、FCGIなどいろんな表記があって、別物なのか同じものなのかどうかわからない。
  • 普通のCGIの場合とで変更が必要な場所があるのかどうか
  • C版のfcgi.rbとruby-fcgiと呼ばれているものは別のものなのかどうか
  • fcgi.rbを入れたとして何に使うのか

とりあえず普通のCGIを動かしてみた。

hello-cgi.cgi:

#!/usr/bin/env ruby
require 'cgi'
CGI.new.out("text/plain") { 'Hello, CGI' }

動いた。

hello-cgi.cgiをhello-fcgid.fcgiにリネーム。 libapache2-mod-fcgidを入れる。

sudo apt-get install libapache2-mod-fcgid

mod_fcgidを有効化。

sudo a2enmod fcgid
sudo /etc/init.d/apache2 restart

動かない。

sudo tail -f /var/log/apache2/error.log
[Mon Apr 16 14:23:45 2007] [notice] mod_fcgid: server /var/www/works/example/ruby/hello-fastcgi.fcgi(12074) started
/usr/lib/ruby/1.8/cgi.rb:1086:in `readlines': Invalid argument (Errno::EINVAL)
        from /usr/lib/ruby/1.8/cgi.rb:1086:in `read_from_cmdline'
        from /usr/lib/ruby/1.8/cgi.rb:1123:in `initialize_query'
        from /usr/lib/ruby/1.8/cgi.rb:2274:in `initialize'
        from /var/www/works/example/ruby/hello-fastcgi.fcgi:3:in `new'
        from /var/www/works/example/ruby/hello-fastcgi.fcgi:3
[Mon Apr 16 14:23:45 2007] [error] [client 192.168.10.1] Premature end of script headers: hello-fastcgi.fcgi
[Mon Apr 16 14:23:51 2007] [notice] mod_fcgid: process /var/www/works/example/ruby/hello-fastcgi.fcgi(12074) exit(communication error), terminated by calling exit(), return code: 1

基本知識が無さ過ぎるのか、思い当たる単語で検索してみても基本ぽい話が書いてあるページにたどり着かない。

Railsは普通に動くところが嫌な感じだ。

Comments


Option