0. 前提
Ruby on Rails を Apache で動かしていきます。Passenger と Passenger の Apache モジュール自体のインストールは以下の過程を経て終わっているものとします。
# gem install passenger # passenger-install-apache2-module
1. 設定方法
1-1. Passenger のモジュール設定を Apache の設定ファイルに書き込む
以下のコマンドを実行して表示された結果をコピーして、Apache の設定ファイルに書き込みます。
# passenger-install-apache2-module --snippet
私が実行した際は上記のコマンドの結果で以下の内容が表示されましたが、ご覧の通り、各種設定やバージョンにより変わりますので、各自のものを用いてください。
LoadModule passenger_module /var/lib/gems/2.3.0/gems/passenger-5.0.30/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /var/lib/gems/2.3.0/gems/passenger-5.0.30 PassengerDefaultRuby /usr/bin/ruby2.3 </IfModule>
書き込む対象の Apache の設定ファイルの場所は以下のとおりです*1。
/etc/apache2/apache2.conf
上記ファイルの一番最後に先ほどの内容を貼り付けて保存しましょう。
1-2. Webアプリの場所を Apache の設定ファイルに書き込む
次に Webアプリ の場所(ディレクトリ)を Apache の設定ファイルに書き込んであげます。書き込む対象の Apache の設定ファイルは以下のとおりです*2。
/etc/apache2/sites-available/000-default.conf
まず、「DocumentRoot」の値がデフォルトで「/var/www/html」になっていますので、これを削除するかコメントアウトします。その上で改めて「DocumentRoot」を設定してあげましょう。
このときに注意することがあります。
DocumentRoot に設定する場所は public ディレクトリです
すなわち、アプリのディレクトリ名が「myapp」だった場合の DocumentRoot の指定は以下のとおりになります。アプリのディレクトリの場所を /var/www/html/myapp として作成している場合です。
DocumentRoot /var/www/html/myapp/public
これで設定ファイル(000-default.conf)を保存しましょう。
1-3. 「RailsEnv」を「development」と明示して設定ファイルに書き込む*3
Rails の開発中は一般的に development モードで行われていると思います*4。その場合に、development モードであることを明示しないと production モードで Passenger 上で実行されて、アプリが正常に実行できません。これを解消しましょう。
とは言っても方法は簡単です。「2. Webアプリの場所を Apache の設定ファイルに書き込む」と同じ方法で「RailsEnv」の設定を書き込みましょう。
設定を書き込むファイルは以下のとおりです(先ほどと同じ)。
/etc/apache2/sites-available/000-default.conf
このファイルのうち、先ほど書いた「DocumentRoot /var/www/html/myapp/public」の下の行に、以下の行を書き加えましょう。
RailsEnv development
書き込みが終わったら設定ファイル(000-default.conf)を保存しましょう。
1-4. Apache を再起動する。
忘れずに Apache を再起動しましょう。
# service apache2 restart
2. URL のルートにアクセスする
例えばローカル開発環境ならば「http://localhost/」にアクセスしましょう。IP アドレス指定でも、ドメインを取得している場合はそのドメインを指定しても、もちろん同じです。
所定のアプリが起動できていれば成功です!
3. 設定が把握できたら
上記の方法は動作するための最低限の内容を標準的な方法で示したものです。より発展的に改修したい場合はそれぞれの設定方法を深く調べてみてください*5。
4. ハマった場合の脱出のコツ
あれもこれもといじくりすぎてしまうと、何が原因で動かない(動くようになった)のかが分からなくなります。面倒でも変更前のファイルや内容は残しておき、変更後と比較できるようにすることが大切です。
5. パーミションが正しくなくてアプリが動かないとき
Passenger は root 権限では動きませんので(「config.ru」の所有者が権限者)、その場合は public ディレクトリの所有者を変更してあげる必要があります。