2

またはを使用せずに複数のラック アプリをマウント/実行するにはどうすればよいですmapRack::UrlMap? これらを使用するとアプリが正常にディスパッチされますが、マッチャーの先頭にディスパッチに使用されるルートのプレフィックスも付けられます。

class API < Sinatra::Base
  get "/api" do
    # blah
  end
end

map( "/api" ) { run API }

上記のルートは「/api/api」でアクセスされますが、これは私が望むものではありません。「/api」だけが必要です。より良い方法があれば、フィルターを使用してリクエストオブジェクトを掘り下げてプレフィックスを削除したくありません。

私はもう試した:

use API.app  # the app is wrapped in a `def self.app` for convenience.
run Web.app

ただしuse、アプリ自体がその中で使用されている場合は問題が発生useします。これを行う:

run API.app
run Web.app

実行するように指定された最後のアプリからのルートのみを提供します。

Rack::Cascade を試してみようとしていますが、これまで使用したことがなく、この問題に対する適切な回答かどうかわかりません。

4

1 に答える 1

3

答えは確かにRack::Cascade:です。

run Rack::Cascade.new( [API, Web] )
于 2012-09-19T22:57:30.417 に答える