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

Ruby Sinatra:指定使用多个应用程序时搜索路由的顺序?,ruby,sinatra,Ruby,Sinatra,我有一个经典风格的Sinatra应用程序,我正在使用MyModularApp向其中添加一个模块化应用程序 这很好,当我运行经典应用程序时,经典应用程序和模块化应用程序的路由都可用。问题在于,模块化应用程序的路径似乎是先搜索的,而经典应用程序的路径则是先搜索后搜索的。我想要相反的行为。我如何实现它?根据: 路由按其定义的顺序进行匹配。将调用与请求匹配的第一个路由 根据: 路由按其定义的顺序进行匹配。将调用与请求匹配的第一个路由 Sinatra应用程序本身也可以是一个应用程序。使用MyModular

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

这很好,当我运行经典应用程序时,经典应用程序和模块化应用程序的路由都可用。问题在于,模块化应用程序的路径似乎是先搜索的,而经典应用程序的路径则是先搜索后搜索的。我想要相反的行为。我如何实现它?

根据:

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

根据:

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


Sinatra应用程序本身也可以是一个应用程序。使用MyModularApp时,您将看到主应用程序之前的请求;无论源文件中有use方法,都会发生这种情况

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

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

not_found do
  MyModularApp.call(env)
end

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

Sinatra应用程序本身也可以是一个应用程序。使用MyModularApp时,您将看到主应用程序之前的请求;无论源文件中有use方法,都会发生这种情况

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

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

not_found do
  MyModularApp.call(env)
end

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

这回答了如何在给定应用程序中搜索路由的问题。但这无助于解决我的问题。在经典应用程序中,我将use MyModularApp语句放在哪里似乎并不重要——首先搜索模块化应用程序。不会,这无关紧要。这回答了在给定应用程序中如何搜索路线的问题。但这无助于解决我的问题。在经典应用程序中,我把use MyModularApp语句放在哪里似乎并不重要——首先搜索的是模块化应用程序。不,不会,这是无关的。