Sinatra:指定使用多个应用时搜索路线的顺序?

时间:2013-02-15 02:11:03

标签: ruby sinatra

我有一个经典风格的Sinatra应用程序,我正在使用use MyModularApp添加模块化应用程序。

这很好用,当我运行经典应用程序时,可以使用经典模块和模块化应用程序的路由。问题是,似乎首先搜索来自模块化应用程序的路由,然后搜索经典应用程序中的应用程序。我想反过来的行为。我怎样才能实现它?

2 个答案:

答案 0 :(得分:4)

Sinatra应用程序可以是used as Rack middleware以及它们自己的应用程序。使用use MyModularApp您是adding the module into the middleware stack,因此它会在主应用程序之前看到请求;只要您在源文件中使用use方法,就会发生这种情况。

当充当中间件时,如果当前应用中没有路由匹配,Sinatra应用会将请求转发到堆栈中,因此这就是您看到当前行为的原因。

让它按照您的意愿工作的一种方法是设置一个调用模块化应用程序的自定义not_found处理程序:

not_found do
  MyModularApp.call(env)
end

现在,如果您的主应用程序没有与请求匹配的路由,则会调用模块化应用程序。

答案 1 :(得分:0)

根据the Sinatra documentation

  

路由按照定义的顺序进行匹配。调用与请求匹配的第一个路由。