LoginSignup
20
18

More than 5 years have passed since last update.

一つのドメインの下にPassengerでRailsアプリをたくさんぶら下げる方法

Last updated at Posted at 2015-08-17

ググると古い情報がたくさんでてきて、シンボリックリンクを貼るとか貼らないとか、貼らないと動かないという内容もあったりでよくわからなくなってしまったので、ちゃんとドキュメントを読んで理解の範疇でまとめました。

Passenger 5.0.13 + Rails 4.2.3 を使いました。

例1. サブディレクトリだけRailsアプリ

次のは / にアクセスしたときは、静的なHTML /var/www/default/index.html を見て /app1 の場合は /var/www/app1 に capistrano でデプロイした Rails アプリを見る場合の設定です。

URL 実際のパス
/ /var/www/default/index.html
/app1 /var/www/app1/current
httpd.conf
<VirtualHost *:80>
  ServerName xxx.sakura.ne.jp

  DocumentRoot /var/www/default
  <Directory /var/www/default>
    Allow from all
    Options -MultiViews
  </Directory>

  <Directory /var/www/*/current/public>
    Allow from all
    Options -MultiViews
  </Directory>

  # app2を作る場合は次の5行をコピペで増やしてapp2にする
  Alias /app1 /var/www/app1/current/public
  <Location /app1>
    PassengerBaseURI /app1
    PassengerAppRoot /var/www/app1/current
  </Location>
</VirtualHost>

例2. 全部Railsアプリ

次のは / もRailsアプリ app0 になっている例です。

URL 実際のパス
/ /var/www/app0/current
/app1 /var/www/app1/current
httpd.conf
<VirtualHost *:80>
  ServerName xxx.sakura.ne.jp

  <Directory /var/www/*/current/public>
    Allow from all
    Options -MultiViews
  </Directory>

  DocumentRoot /var/www/app0/current/public

  # app2を作る場合は次の5行をコピペで増やしてapp2にする
  Alias /app1 /var/www/app1/current/public
  <Location /app1>
    PassengerBaseURI /app1
    PassengerAppRoot /var/www/app1/current
  </Location>
</VirtualHost>

Railsアプリのデプロイ先は /var/www/* 以下にまとめることで、Directory設定を共通化しています。

またRailsは、Passengerが設定してくれる環境変数 RAILS_RELATIVE_URL_ROOT を考慮して、自動的にパスにプレフィクスを付与してくれるので、昔はやけに難しかった記憶があるのですが、今では特別に何かする必要はなくなりました。

例3. 全部Railsアプリのはずだったが一部だけ静的HTMLの場合

例2と同じ構成だけど app3 だけは静的HTMLの場合。

URL 実際のパス
/ /var/www/app0/current
/app1 /var/www/app1/current
/app3 /var/www/app3/current/index.html
httpd.conf
<VirtualHost *:80>
  ServerName xxx.sakura.ne.jp

  <Directory /var/www/*/current/public>
    Allow from all
    Options -MultiViews
  </Directory>

  DocumentRoot /var/www/app0/current/public

  # app2を作る場合は次の5行をコピペで増やしてapp2にする
  Alias /app1 /var/www/app1/current/public
  <Location /app1>
    PassengerBaseURI /app1
    PassengerAppRoot /var/www/app1/current
  </Location>

  # Railsアプリではないとき。例2の設定にこの5行だけ追加
  Alias /app3 /var/www/app3/current
  <Location /app3>
    PassengerEnabled off
    Options All
  </Location>
</VirtualHost>

Passenger を無効にする PassengerEnabled off がポイントです。無効にしなくても /app3/index.html のように直リンクであれば一応見れますが、/app3 にアクセスするとPassengerがRailsアプリと勘違いしてエラーになります。ファイル一覧機能(Options Indexes)などを正しく動作させるためにも無効にしておく方がよいです。

20
18
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
18