Apache上でRailsアプリを動かすPassengerを使ってみたよ(その2)

前回の更新からだいぶ時間が経ってしまいましたね。
設定自体は済んでいたのですが、まとめるのが面倒くさいので先延ばしにしてしまいました。


さて、前回まででコンパイルも通りインストールは完了していました。
今回はApacheの設定ファイルへの設定を行います。


debian(lenny)の場合だとaptでインストールしたapacheの設定ファイルは以下のような感じになっています。
(squeezeでも同じです。)

$ ls /etc/apache2/
apache2.conf
conf.d
envvars
httpd.conf
mods-available
mods-enabled
ports.conf
sites-available
sites-enabled

debianの場合はmodを追加する場合はmods-available以下に各modごとの設定を記述したファイルを配置します。
そして、そのmodを有効にする場合はmods-enabled以下にmods-available以下に配置した設定ファイルへのシンボリックリンクを張ります。

passenger.loadの配置

以下のファイルを配置します。

  • /etc/apache2/mods-available/passenger.load

内容:

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

passenger.loadにはmodのロードに関する部分のみ記述します。

passenger.confの配置

以下のファイルを配置します。

  • /etc/apache2/mods-available/passenger.conf

内容:

RailsSpawnServer /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server
RailsRuby /usr/bin/ruby1.8

passenger.confにはその他設定部分を記述します。

モジュールの有効化

mods-enabled以下にシンボリックリンクを作成します。

# ln -s /etc/apache2/mods-available/passenger.load /etc/apache2/mods-enabled
# ln -s /etc/apache2/mods-available/passenger.conf /etc/apache2/mods-enabled

httpd.confに追記

Readmine公式の手順*1では以下のような感じでVirtualHostに直に割り当ててます。

<VirtualHost *:80>
ServerName redmine.example.jp
DocumentRoot /var/lib/rails/redmine/public


しかし、これだと複数のRailsアプリで共存する場合に面倒になるので、RailsBaseURIを設定します。
以下のように追記します。

RailsBaseURI /redmine

Railsアプリを増やす場合には「RailsBaseURI hogehoge」という具合に行を追加しておけば良いです。


設定ファイルへの追記も完了したので、ファイルの配置を行います。
DocumentRoot以下にファイル一式を配置するよりはデプロイ場所へのシンボリックリンクを配置した方が使い勝手がいいです。

DocumentRoot以下にRAILS_ROOT/publicへのシンボリックリンクを配置する

以下はDocumentRootが/var/www、RAILS_ROOTが/home/hoge/rails/my_appになっている場合です。

# ln -s /home/hoge/rails/my_app/public /var/www/redmine

注意する点は以下の2点です。

Apacheの再起動と確認

ここまで設定すれば再起動でひとまず使えるはずです。
(rake db:migrateは忘れてないですよね?)

# /etc/init.d/apache2 restart

チューニングパラメータなど

いくつかチューニングパラメータがあります。
私はhttpd.confに記述してます。

RailsMaxPoolSize 4         #Apacheサーバ上に生成されるRailsのインスタンス数
RailsPoolIdleTime 240    #設定した時間(秒)以上インスタンスへのアクセスがなかった場合終了する


RailsMaxPoolSizeはメモリ量に応じて設定。
(メモリ[MB] / 64 - 2 程度のよう)
RailsPoolIdleTimeはユーザの平均滞在時間の2倍程度を設定。