2

サーバー上で実行したい 2 つのアプリがあります。「デフォルト」アプリにしたいアプリの 1 つです。つまり、特定のパスを除い/fooて、すべての URL をデフォルトでこのアプリに送信する必要があります。次のように呼び出します。

http://mydomain.com/        -> app1
http://mydomain.com/apples  -> app1
http://mydomain.com/foo     -> app2

私の 2 つのラック アプリは次のようにインストールされます。

/var
  /www
    /apps
      /app1
        app.rb
        config.ru
        /public
      /app2
        app.rb
        config.ru
        /public
    app1 -> apps/app1/public
    app2 -> apps/app2/public

(app1app2は、それぞれのアプリのパブリック ディレクトリへのシンボリック リンクです)。これは、ここで説明されているサブ URI の Passenger セットアップです: http://www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_rack_to_sub_uri

次の構成では/foo、app2 に移動しました。

server {
  listen 80;
  server_name mydomain.com;
  root /var/www;
  passenger_enabled on;
  passenger_base_uri /app1;
  passenger_base_uri /app2;

  location /foo {              
    rewrite ^.*$ /app2 last;
  }
}

では、app1 に他のすべてを取得させるにはどうすればよいでしょうか。私は以下を試しました(location /fooディレクティブの後に配置されています)が、無限の内部リダイレクトで500を取得します:

location / {
  rewrite ^(.*)$ /app1$1 last;
}

ディレクティブがその無限のリダイレクトを防ぐことを望んでいましたlastが、そうではないと思います。私の/foo書き直しはまだ機能します。そして、私はまだ行くことができますhttp://mydomain.com/app1

何か案は?ありがとう!

4

1 に答える 1

1

config.ru1 つの方法は、要求を正しいアプリにディスパッチする新しいファイルを作成することです。

# /var/www/apps/config.ru
require './app1/app1'
require './app2/app2'

map ('/') { run App1 }
map ('/foo') { run App2 }

もちろん、これはアプリが同じ実行スペースで動作できるように作成する必要があることを意味します。

于 2011-08-02T12:33:40.710 に答える