FastCGI インストール


いろいろ文句を言いつつもやはりおしゃれな Rails。もうちょっとやってみようということで。
今日は FastCGI のインストールを試みた。


ネタ本は「ライド・オン・Rails」(吉田和弘他著)。


手順は、以下の通り

1. FastCGI 本体のインストール
2. Apache の mod_fastcgi のインストール
3. RubyFastCGI アダプタのインストール
4. Rails アプリの public フォルダの .htaccess の編集
5. Apache 再起動

これだけで、public フォルダに URL 指定するとちゃんと Rails アプリが動くことを確認。


1., 2. に関しては、FastCGI 本家から *.tar.gz をダウンロードして、make install する。
3. に関しては、gem install fcgi で OK。
4. は .fcgiAddHandler して RewriteRule で dispatch.cgi => dispatch.fcgi すればいいだけ。


私の場合は、上記 3. の gem install fcgi

Updating installed gems...
ERROR: While executing gem ... (NoMethodError)
undefined method `refresh' for #

と言われてハマッた。ググると、同じような人が多く、source_cache というやつを消せと言われてやってみても、まだ駄目。
結局、私の場合、yum install fcgi --backtrace として、コケている場所を探し出し、


# /usr/local/lib/ruby/site_ruby/1.8/rubygems/source_info_cache.rb
# Refreshes each source in the cache from its repository.
def refresh
Gem.sources.each do |source_uri|
# cache_entry = cache_data[source_uri]
# if cache_entry.nil? then
cache_entry = Gem::SourceInfoCacheEntry.new nil, 0
cache_data[source_uri] = cache_entry
# end
cache_entry.refresh source_uri
end
update
flush
end

と無理やり新しいオブジェクトを作るようにして乗り切った。print してみると、cache_entry には Gem::SourceInfoCacheEntry オブジェクトが入っていたのに。なんで refresh メソッドがないと騒いでいたのか。しかも途中で Hash オブジェクトに変わっているし。やれやれ。