假设我有一个模块化的Sinatra应用程序用于一百个站点,我需要有条件地拉入路由 - 如果request.host是example.com,那么我想在文件{{1}中注册路由 - 但是如果request.host是example_routes.rb
,那么我想完全注册另一组路由,完全忽略第一个文件。
也有人可能会说应用程序试图做太多事情,但为了讨论,我想听听一些想法和方法。
不幸的是,当请求对象通过时(注册新路由需要),似乎无法再注册该路由。这是我的问题的本质。
答案 0 :(得分:3)
正如您所注意到的,您无法根据请求定义路由,因为它们都是在第一个请求进入之前在启动时设置的。
实现目标的一种方法是使用: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
如果需要,它们可以位于不同的文件中,并且它们不会相互覆盖,因此您可以在启动时调用它们,并且请求将路由到相应的代码。开发和测试可能很棘手,您可能需要以某种方式在本地访问所有路由。