Ubuntu Server に Passenger をインストール
Aptitude ではだめ
とりあえずは apt-get
と思い、下記のようにしたらとしたら libapache2-mod-php5
などが消されて焦りました。
sudo apt-get install libapache2-mod-passenger
Aptitude を使うと、Passenger と PHP 5 は共存できないようです。それぞれが依存している apache2-mpm-worker
と apache2-mpm-prefork
が共存できないのが原因のよう。
via Ubuntu 日本語フォーラム / ubuntu 9.04 passenger と php5 は共存できない?
Gem でインストール
しょうがないので PHP 5 を入れ直し、Passenger を gem で入れる事にしました。
sudo gem install passenger
sudo /var/lib/gems/1.8/bin/passenger-install-apache2-module
足りないパッケージさあれば教えてくれるので、インストールしてから再度実行。
sudo /var/lib/gems/1.8/bin/passenger-install-apache2-module
設定ファイルの記述
httpd.conf
には直接書かず、専用のファイルを作ります。Ubuntu の流儀?
/etc/apache2/mods-available/passenger.load
:
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-2.2.9/ext/apache2/mod_passenger.so
/etc/apache2/mods-available/passenger.conf
:
<ifModule mod_passenger.c>
PassengerRoot /var/lib/gems/1.8/gems/passenger-2.2.9
PassengerRuby /usr/bin/ruby1.8
</ifModule>
モジュールを有効に。mods-enabled
から mods-available
にシンボリックリンクを張って有効にするんですね。知りませんでした。
sudo ln -s /etc/apache2/mods-available/passenger.load /etc/apache2/mods-enabled/passenger.load
sudo ln -s /etc/apache2/mods-available/passenger.conf /etc/apache2/mods-enabled/passenger.conf
サブディレクトリで公開
ルート以外で公開したい場合、まずは公開ディレクトリにシンボリックリンクを作成します。
sudo ln -s /path/to/app-name/public /path/to/www/app-name
そして、Apache の設定ファイルに少し付け足します。
/etc/apache2/mods-available/passenger.conf
:
<ifModule mod_passenger.c>
PassengerRoot /var/lib/gems/1.8/gems/passenger-2.2.9
PassengerRuby /usr/bin/ruby1.8
RailsBaseURI /app-name
</ifModule>