Apache + Passenger

Debian GNU/Linux squeezeとrubygems 1.3.4とruby 1.8.7でインストール。

まず、passengerを導入。

% sudo gem1.8 install passenger

設定する。

% sudo passenger-install-apache2-module

apache2-prefork-devを入れなさいと言われるのでインストールする。

% aptitude install apache2-prefork-dev

その後、Apacheを設定。

% sudo passenger-install-apache2-module

passenger用のモジュールを用意。/etc/apache2/mods-available/passenger.loadの中身は以下のとおり。

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/mod_passenger.so

/etc/apache2/mods-available/passenger.confの中身は以下のとおり。

PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2
PassengerRuby /usr/bin/ruby

モジュールを反映させる。fastcgiを利用していた場合はfcgidを無効にする。

% sudo a2enmod passenger
% sudo a2dismod fcgid

railsのソースファイルが/home/hogehoge/rails-serverとし、http://hogehoge.net/rails/でアクセスできるようにするとき、/etc/apache2/sites-available/defaultに以下を加える。

RailsBaseURI /rails

そして、シンボリックリンクをはる。

% sudo -u www ln -s /home/hogehoge/rails-server/public /var/www/rails

Apacheを再起動。

% sudo /etc/apache2 stop
% sudo /etc/apache2 start

あれ?うまくいかない。理想的には「http://hogehoge.net/rails/コントロール名/アクション名」で、railsには、「/コントロール名/アクション名」が渡されると期待していたのに、「rails/コントロール名/アクション名」が渡された結果、「rails」部分がroute.rbに記載されていないといってうまく動かない。WebRickで動かすときには、「http://localhost:3000/コントロール名/アクション名」となるから問題ないのだけど、どうやればよいのやら。

上の件は解決した。/home/hogehoge/rails-server/config/environments/production.rbに以下を付け加える。

# for passenger
config.action_controller.relative_url_root='/rails'

この話の参考