【问题标题】:dynamic routing in sinatra based on request domainsinatra 中基于请求域的动态路由
【发布时间】:2014-01-03 05:45:56
【问题描述】:

假设我有一个用于一百个站点的模块化 Sinatra 应用程序,我需要有条件地提取路由 - 如果 request.host 是 example.com,那么我想在文件 example_routes.rb 中注册路由 -但是如果 request.host 是 other_example.com,那么我想完全注册另一组路由,完全忽略第一个文件。

也有人可能会争辩说,该应用正在尝试做太多事情,但为了便于讨论,我很想听听一些想法和方法。

不幸的是,当请求对象通过时(需要注册新路由),似乎无法再注册路由。这是我的问题的本质。

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    正如您所注意到的,您无法根据请求定义路由,因为它们都是在启动时在第一个请求到来之前设置的。

    实现目标的一种方法是使用:host_name condition

    get 'a_route', :host_name => 'example.com' do
      # this route will only apply to requests to example.com
    end
    
    get 'a_route', :host_name => 'other_example.com' do
      # this route will only apply to requests to other_example.com
    end
    

    如果您愿意,它们可以位于不同的文件中,并且它们不会相互覆盖,因此您可以在启动时调用它们,并且请求将被路由到适当的代码。开发和测试可能会很棘手,您可能需要想办法在本地访问所有路由。

    【讨论】:

    • 这很有帮助,但我将在数百个域中使用同一个应用程序:( - 最终,我将基于从每个域对象的唯一属性返回的条件进行路由切换
    猜你喜欢
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 2017-02-26
    • 2014-06-16
    相关资源
    最近更新 更多