挂载多个Rack应用程序而无需在URL中添加前缀

时间:2012-09-19 14:18:04

标签: ruby sinatra rack

如何在不使用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

但如果应用程序本身也使用了useuse会导致问题。这样做:

run API.app
run Web.app

只会提供最后一个应用程序运行的路线。

我即将尝试使用Rack :: Cascade,但我以前从未使用过它,也不知道这是否是解决这个问题的好方法。

1 个答案:

答案 0 :(得分:3)

答案确实是Rack :: Cascade:

run Rack::Cascade.new( [API, Web] )