我正在尝试在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将请求路由到AnotherRouteAnotherRoute然后仅将第二个another视为路径。

    请注意,此路径将同时响应GETPOST请求,每个请求均由相应的块处理。

  • 目前尚不清楚您要做什么,但我认为您可以通过运行一个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/

    10-13 02:15