我正在尝试在Sinatra应用程序中使用子类化样式。因此,我有一个像这样的主应用程序。
class MyApp < Sinatra::Base
get '/'
end
...
end
class AnotherRoute < MyApp
get '/another'
end
post '/another'
end
end
run Rack::URLMap.new \
"/" => MyApp.new,
"/another" => AnotherRoute.new
在config.ru中,我了解它仅用于“获取”,其他资源(例如“PUT”,“POST”)又如何呢?我不确定是否缺少明显的东西。而且,如果我有十个路径(/path1,/path2,...),即使它们位于同一类中,也必须在config.ru中对它们全部进行配置吗?
最佳答案
使用 URLMap
,您可以指定应在其中安装应用程序的基本URL。确定应用程序本身要使用哪个路由时,不会使用 map 中指定的路径。换句话说,应用程序的行为就好像它的根在URLMap
中使用的路径之后。
例如,您的代码将响应以下路径:
/
:将被路由到/
MyApp
路由/another
:将转到/
中的AnotherRoute
路由。由于AnotherRoute
扩展了MyApp
,因此它将与/
中的MyApp
相同(但在不同的实例中)。URLMap
看到/another
并使用它映射到AnotherRoute
,从路径中删除请求的这一部分。 AnotherRoute
然后仅看到/
。 /another/another
:将被路由到/another
中的两个AnotherRoute
路由。同样,URLMap使用第一个another
将请求路由到AnotherRoute
。 AnotherRoute
然后仅将第二个another
视为路径。请注意,此路径将同时响应
GET
和POST
请求,每个请求均由相应的块处理。 目前尚不清楚您要做什么,但我认为您可以通过运行一个
AnotherRoute
实例来实现所需的功能,而config.ru
只是:run AnotherRoute.new
由于
AnotherRoute
扩展了MyApp
,因此将为其定义/
路由。如果您正在寻找一种将路由添加到现有Sinatra应用程序的方法,则可以使用create a module with an
included
method that adds the routes,而不是使用继承。关于ruby - 如何在模块化Sinatra应用程序中正确配置config.ru?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9614766/