我正在和Sinatra一起建立一个Grape API。到目前为止,我一直将它们安装在这样的不同路线中:
run Rack::URLMap.new("/" => Frontend::Server.new,
"/api" => API::Server.new)
“/ api”由Grape应用程序提供,“/”由Sinatra应用程序提供。但我想使用子域来区分这些问题而不是实际的“子URL”。关于如何做到这一点的任何线索?
提前感谢您的帮助。
答案 0 :(得分:0)
有一个rack-subdomain gem,但它只处理重定向到路径,而不是机架应用程序。您可以将其分叉并将其重定向到机架应用程序。
你也可以自己动手:
class SubdomainDispatcher
def initialize
@frontend = Frontend::Server.new
@api = API::Server.new
end
def call(env)
if subdomain == 'api'
return @api.call(env)
else
return @frontend.call(env)
end
end
private
# If may be more robust to use a 3rd party plugin to extract the subdomain
# e.g ActionDispatch::Http::URL.extract_subdomain(@env['HTTP_HOST'])
def subdomain
@env['HTTP_HOST'].split('.').first
end
end
run SubdomainDispatcher.new