如何在不使用map
或Rack::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,但我以前从未使用过它,也不知道这是否是解决这个问题的好方法。
答案 0 :(得分:3)
答案确实是Rack :: Cascade:
run Rack::Cascade.new( [API, Web] )