Passenger導入:Apache上でRailsアプリを動かす

Mongrel+mod_proxyでがんばってたけど、こっちのほうがはるかに簡単。しかも早いらしい。

gemでPassengerをインストール

$ sudo gem install passenger

適当に依存解決するためにYesして、WARNIGがいっぱい出たけど無視。

ApacheModuleのインストール

$ sudo passenger-install-apache2-module

command not foundといわれる
/var/lib/gems/1.8/binにパスが通ってない

めんどいのでフルパスで起動

$ sudo /var/lib/gems/1.8/bin/passenger-install-apache2-module

必要なものがそろってるかチェックが走る。

* Apache 2 development headers… not found(これ
$ sudo apt-get install apache2-prefork-dev

これを入れるといいらしい

もういっかい!

$ sudo /var/lib/gems/1.8/bin/passenger-install-apache2-module

通る

最後にhttpd.confに設定方法が表示される。メモる。

LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-2.0.6/ext/apache2/mod_passenger.so
PassengerRoot /var/lib/gems/1.8/gems/passenger-2.0.6
PassengerRuby /usr/bin/ruby1.8

コピペする。

/etc/apache2/sites-available/の中のVirtualHostの設定に
DocumentRoot /home/user/testapp/public
とすれば動くらしいけども、今回は既存のApacheで動いてるCGI他もろもろと同居させるため、サブディレクトリから動かしたいので
DocumentRoot /var/www/
を書き換えたくない

$ cd /var/www
$ sudo ln -s /home/user/testapp/public testapp

Publicへのシンボリックリンクを貼っておく
さらに

RailsBaseURI /testapp

とすると、URIを補正してくれるらしい。新規にドメイン作る必要もなくなる。
ついでに、デフォルトだとProductionになってるらしいので、

RailsEnv development

とも書いておく。

Apache再起動する。

$ sudo /etc/init.d/apache2 restart

http://hostname/testapp

で動く。おそらく複数のアプリを起動もできる

RailsBaseURI /testapp1
RailsBaseURI /testapp2

(未確認、あとで試す → 確認、同居可能)

参考
http://redmine.jp/tech_note/apache-passenger/
http://d.hatena.ne.jp/satake7/20080605/p1