単純に /hoge と /fuga に別々のアプリケーションをdeployするのなら、話は単純で、以下のチュートリアルのとおりなんですが。

問題は passenger_base_uri に「/」を指定できないこと。

方針としては、「/」のアプリケーションと「/hoge」のアプリケーションは別々のポートで配備して、かつ「/」をデプロイした側から、リバースプロキシで「/hoge」に飛ばしてあげる、という感じです。Pound辺りと組み合わせてもいいんですが、Nginxだけで完結できます。

1
2
# base_uri対応の前準備(例)
ln -s /var/www/rails-apps/hoge/public /var/www/passenger/hoge
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
http {
#....
    passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15;
    passenger_ruby /usr/bin/ruby1.8;
    server { # for "/" setting
        listen 8080;
        server_name dev.local.udzura.jp;
        passenger_enabled on;
        rails_env production;
        root /var/www/rails-apps/root-app/public;
        error_page  404              /404.html;
        error_page  500 502 503 504  /error.html;
        location /hoge {
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header Host $host:$server_port;
            # その他、継承したいヘッダーを追加
            proxy_pass http://127.0.0.1:8081/hoge;
        }
    }
 
    server { # for "/hoge" setting
        listen 8081;
        server_name dev.local.udzura.jp;
        # 8081番ポートへの直接アクセスを禁止
        allow 127.0.0.1;
        deny  all;
        passenger_enabled on;
        rails_env production;
        root /var/www/passenger;
        passenger_base_uri /hoge;
        error_page  404              /hoge/404.html;
        error_page  500 502 503 504  /hoge/500.html;
    }
#....
}

これで、「/」と「/hoge」とでは別のアプリケーションを参照してくれます。

参考