2013-10-25 30 views
3

我建立一個葡萄API一起西納特拉。到目前爲止,我已經安裝在他們不同的途徑是這樣的:機架安裝的應用程序在不同的子域

run Rack::URLMap.new("/" => Frontend::Server.new, 
        "/api" => API::Server.new) 

其中「/ API」是由葡萄的應用投放和「/」由西納特拉的應用程序。但我想用子域分隔這些問題,而不是實際的「子URL」。如何做到這一點的任何線索?

在此先感謝您的幫助。

+0

http://stackoverflow.com/a/19591172/1279355這可能對您的其他解決方案 –

回答

0

有一個rack-subdomain寶石,但是它只能處理重定向路徑,而不是架的應用程序。您可以將其分叉並將其重定向到機架應用程序。

你也可以只推出自己:

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 
相關問題