Passenger (mod_rails) セットアップ

環境

まずはインストール

$ sudo gem install passenger

$ sudo passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v2.0.6.

...

Installation instructions for required software

 * To install OpenSSL support for Ruby:
   Please run apt-get install libopenssl-ruby as root.

 * To install Apache 2 development headers:
   Please run apt-get install apache2-prefork-dev as root.

If the aforementioned instructions didn't solve your problem, then please take
a look at the Users Guide:

  /usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/doc/Users guide.html

libopenssl-ruby と apache2-prefork-dev が足りないらしい。

$ sudo apt-get install libopenssl-ruby
$ sudo apt-get install apache2-prefork-dev

もう一度 apache2-module をインストール

$ sudo passenger-install-apache2-module
...
Deploying a Ruby on Rails application: an example

Suppose you have a Ruby on Rails application in /somewhere. Add a virtual host
to your Apache configuration file, and set its DocumentRoot to
/somewhere/public, like this:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      DocumentRoot /somewhere/public
   </VirtualHost>

And that's it! You may also want to check the Users Guide for security and
optimization tips and other useful information:

  /usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/doc/Users guide.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
http://www.modrails.com/

ドメイン名ごとに分ける

アクセスをこんな風に分けたい。

  • ドメインA => 静的コンテンツ
  • ドメインB => Railsアプリ

ドメインAはほぼdefaultのまま。
ドメインBの設定に、passengerの設定も混ぜてしまう。
本当は分けるべきだが、必要ならあとでやる。

  1. ドメインBのVirtualHost設定を追加する
# /etc/apache2/conf.d/passenger
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.6
PassengerRuby /usr/bin/ruby
RailsEnv development

<VirtualHost *>
        ServerName example2.com
        DocumentRoot /var/www
        RailsBaseURI /rails
</VirtualHost>
  1. ドメインAを、既存のVirtualHostのServerNameに追加する
NameVirtualHost *
<VirtualHost *>
        ServerName example1.com
        DocumentRoot /var/www
        ...
</VirtualHost>
  1. Apache 再起動
$ sudo apache2ctl restart 

これでOK。
Rails アプリには http://example2.com/rails
別の静的コンテンツには http://example1.com/ でそれぞれアクセスできる。

はまった点

最初はドメインAの ServerName を設定していなかったためか、http://example1.com/hoge にアクセスすると Rails の Rooting Error が吐かれていた。


アプリが増えても、Apacheの設定を書くだけ。