RedmineをfastcgiからPassengerでの実行に切り替え

さくらのVPS上のDebianが高負荷になる問題が解決できず、ダメ元でRedmineの実行をfastcgiからPassengerに切り替えてみた。rubyのプロセスが残りまくる状態があってそれが原因かどうか定かではないのだがfastcgiやredmineをデバッグする気にもならないので(そもそもLoad avarageが100とかになってログインもできず、ゲストOSを再起動して回避していたので調査自体が面倒)とりあえずPassengerで安定すれば結果オーライということで切り替え。

Debian/UbuntuでのPassengerのインストール

簡単に入れられるようになったものだ。

sudo apt-get install libapache2-mod-passenger

fastcgiからpassengerでの設定変更

まず前提としてパス/redmineで運用している。

VirtualHostで設定していたのでその中に

  <Location /redmine>
    Options Indexes -ExecCGI FollowSymLinks -MultiViews
    RailsEnv production
    RailsBaseURI /redmine
  </Location>

をいれる。

Passengerの場合Aliasでは動かないらしいのでsymlinkを張る。

# 例
ln -s /path/to/redmine/public /path/to/docroot/redmine

で.htaccessは使わないのでリネームして退避。

最後にfastcgiを無効にする。

sudo a2dismod fastcgi
sudo a2enmod passenger
sudo /etc/init.d/apache2 restart

トラブル: ログファイルが書き込まれない

なぜかlog/production.logが出力されず、調べたところPassengerはデフォルトではconfig/environment.rbの所有者で実行させるようだ。
http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerUserSwitching

というわけで所有者を変えておく。

# 例
sudo chown user:group -R log tmp files

パフォーマンスについては体感的にはあまり違いはなさそう。これで安定してくれればいいのだが・・・・しばらく様子を見よう。