Railsのために、ポート開けたり、リバースプロキシするのが面倒だし。PHPと同じようにファイル展開するだけで動いたら良いのに。
やってみたら動く。
調べたら動くことが分かった。
下準備
sudo aptitude install libapache2-mod-fcgid sudo aptitude install libfcgi-dev sudo gem install fcgi
設定の流れ
railsディレクトリの準備
rails new bookapp rails generate home index rails server -b 127.0.0.1
くらいですかね。ここまでやって起動確認はやっておくと後で切り分けが楽。
.htaccessを準備する。
public/.htaccess に用意します。
AddHandler fastcgi-script .fcgi RewriteEngine ON RewriteBase /book/ RewriteRule ^.+$ dispatch.cgi [QSA,L]
上で指定したdispatch.cgi
実際にRailsを起動する dispatch.fcgiをrubyで
#!/usr/bin/ruby require 'rubygems'#ruby 1.8 require 'fcgi'# ruby1.8 require '../config/environment’ #ruby1.8 class Rack::PathInfoRewriter def initialize(app) @app = app end def call(env) env.delete('SCRIPT_NAME') parts = env['REQUEST_URI'].split('?') env['PATH_INFO'] = parts[0] #必要に応じてPATH_INFOを書き換える #env['PATH_INFO'] = env["PATH_INFO"].sub(%r^/path/to/my/rails/public", "") env['QUERY_STRING'] = parts[1].to_s @app.call(env) end end Rack::Handler::FastCGI.run Rack::PathInfoRewriter.new(YOURAPPNAME::Application)
PATH_INFOは、Railsを展開したいディレクトリに応じて適当に切り詰めてください。
fastCGIはなぜFAST(速)なのか。
それはキャッシュするからだ。mod_fcgi + ruby の場合、rubyのスクリプトファイルを読み込んでキャッシュしてる。
ファイルキャッシュは、OSレイヤでやってる。fcgiはさらにバイナリキャッシュをする。バイナリはrubyスクリプトが実行可能形バイナリに変換されたもの
つまり、単純にfcgiを使ってると、 apache reload を頻繁にやらないと、バイナリが更新されない。
逆に、バイナリキャッシュをやめると、ファイルの更新が速反映されるが、Rubyの実行バイナリへの変換が遅いので、fcgiの恩恵にあずかれない。
ってことで、、、、
fcgiは enviroment => product 専用。
dev環境で使うには、、、開発中は頻繁にファイル更新がル。ファイル更新するとバイナリキャッシュがあるので色々めんどくさい。
バイナリキャッシュの恩恵に預かれない。なのでfcgiを使うことすら無駄。ちょっと考えれば分かることだった。お疲れ様オレ。
参考資料
>Linuxなら素直にPassengerを使いましょう。もしくはmongrel(+mod_proxy(_balancer))で。
http://okwave.jp/qa/q5201582.html
どの辺が素直なんだか。。。これは嘘なのです。相変わらず、ドヤ顔のOKWAVEはむかつく。
Rails 3 is built on top of Rack and Rack provides a FastCGI handler.
http://stackoverflow.com/questions/3296206/rails-3-and-fcgi
http://rack.rubyforge.org/doc/
http://rack.rubyforge.org/doc/Rack/Handler/FastCGI.html
コレが正しい回答です。
そもそも、CGIやFastCGI駆動は今は推奨されていないみたいです。
http://okwave.jp/qa/q5201582.html
(というか、RailsでFastCGIを使うというのはどこで入手された情報でしょう?)
上のちょっとドヤ顔の回答がむかついたのです。だからfcgiで動かした。
「非推奨はドコに書いてあった?」本家にはドキュメントが見当たらない。
OKWaveは第三者がみて間違ってるよと、添削したくても指摘する機能が無いので、どうしても記事が洗練されない。そのくせ、疑問点に対する回答して書かれてて、もっともらしく見えるので問題。