Ubuntu 16.04 LTS で Passenger + Apache を用いて Railsアプリ を公開する方法

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 ディレクトリの所有者を変更してあげる必要があります。

*1:最も標準的なファイル

*2:最も標準的なファイル

*3:必要ない場合もあります

*4:モードの詳しい違いはここでは触れません

*5:confファイルを独立させたり、アプリのディレクトリを任意の場所にしたりするなど

Powered by はてなブログ