1. Passenger での Webアプリ 実行
Rails や Sinatra を Apache で起動する際、Apache を Webアプリ 専用にするのではなく、サブディレクトリで切って複数起動する場合の設定です。Passenger のインストールや、単独での Webアプリ の実行確認は済んでいるものとします。
2. 設定方法
2-1. 「000-default.conf」に「RackBaseURI」を書き加える
/etc/apache2/sites-available/000-default.conf
の<VirtualHost \*:80>*</VirtualHost>
で囲われているうちの任意の場所に、以下を書き加えましょう。
RackBaseURI /myapp1 RackBaseURI /myapp2
これは、以下の URI にてそれぞれ Webアプリ を起動することを設定しています(localhostの場合)。
2-2. シンボリックリンクを張る
「1.」の設定に加え、「1.」で設定した場所にシンボリックリンクを張る必要があります。その際の注意点は以下のとおりです。
シンボリックリンクの対象は public ディレクトリです
上記の例の場合は、以下のようにシンボリックリンクを張る必要があります。
# cd /var/www/html # ln -s /var/www/html/sampleapp1/public myapp1 # ln -s /var/www/html/sampleapp2/public myapp2
これで、sampleapp1
およびsampleapp2
へのリンクが割り当てられました。
2-3. Apache を再起動する
Apache を再起動しましょう。
# service apache2 restart
3. アプリの実行を確認する。
以下の URI にアクセスしてアプリが実行されているかを確認しましょう。sampleapp1
が一番目の URI で、sampleapp2
が二番目の URI で実行されていれば成功です。
4. 問題点など
上記の内容から分かりますように、この方法で一般的な Webページ(サイト)と Webアプリ が共存できます。ただ、「RailsEnv」の使い分けなどはできないと思います*1。また、上記の例では元のアプリの場所が/var/www/html
配下になっていますが、これはこの場所である必要(公開されている場所である必要)はありません。
5. パーミションが正しくなくてアプリが動かないとき
Passenger は root 権限では動きませんので(config.ru
の所有者が権限者)、その場合は public ディレクトリの所有者を変更してあげる必要があります。
*1:VirtualHost を使い分ける? あるいは Docker を使うなど