それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

RailsサーバーとApacheの連携まとめ

RailsApacheの連携をアレコレやってみた。

現在候補は3つ

  1. Passenger
  2. Proxy
  3. fcgi/cgi

比較

比較の条件

  • 設定がRailsディレクトリに収まるか。/etc/apache2や/etc/init.dに書くのは面倒だよね。
  • インストールが簡単か。コマンド実行だけでいけるか
  • 再起動がいるか
  • 動作速度は?
手法 設定がRailsディレクトリに収まるか。 インストールが簡単か。 再起動が不要か 動作速度は raisのエラー表示
passenger x x x
proxy x x x
cgi x x
fcgi x x x


mod_proxyは.htaccessに設定書けない。しかも設定するたびにapaache reloadが必要。ってことで不便すぎたわ
cgiは遅い。でも設定がappディレクトリをそのままをアーカイブ出来るので良いし、ドコでも動くし。素敵だわ。
fcgiは速いけど、reloadしまくりって感じだった。
passenger はインストール面倒だし。

Apacheと連携ならpassengerは悪くない選択肢。でも可搬性がなぁ。でも、nginxをApacheの代わりに使うと、貴重なグローバルIPの80番を浪費するし、もどかしぃぃ。

一度動いちゃうと楽だから、passengerは悪くない。でも内部的にproxyしてるってのがイヤですね。cgiはエラーがInternalServerErrorにマッピングされるので・・・あぁもうどれも微妙・・・passengerは悪くない選択肢。でもインストールが。設定が

500 internal server error

CGI/FCGIだとRailsエラーがCGIの500エラーになる。なので、Railsエラーが見られない。開発中はちょっと困る。でも本番運用ならむしろ歓(?)

そもそもRailのサーバーは

2.3系からRack経由になってる。

Rackって?

PythonWSGIをお手本にrubyで実装した物

Rackがあればどうなるの

Rackが抽象化レイヤを提供してくれるので、CGI/Fcgiでも何でも来い。

サポートされてるのは次の物。

http://rack.rubyforge.org/doc/

つまり、RaisはRackが抽象化レイヤの恩恵を受けるので、MongrelでもThinでもなんでもいいし、CGIでも良いんですね。
納得でした


apacheでやることが主眼だから、mongorel使えとか、thinの方が速いとかそういう話題には触れてないです。