2017-03-14 72 views
0

我有兩個子域的Rails應用程序配置爲這樣的routes.rb中使用Rails領域約束

Rails.application.routes.draw do 
    constraints subdomain: 'admin' do 
    devise_for :admin_users, ActiveAdmin::Devise.config 
    ActiveAdmin.routes(self) 
    end 

    namespace :api, defaults: { format: :json }, 
      constraints: { subdomain: 'api' }, path: '/' do 

    scope module: :v1, 
      constraints: ApiConstraints.new(version: 1, default: true) do 
     resources :countries, only: [:show, :index] 
    end 

    end 
end 

這工作完全在本地。我/etc/hosts中看起來像

admin.localhost.local localhost 
api.localhost.local localhost 

但是,當涉及到這個配置在Heroku的,因爲應該事情不工作。

我配置我的DNS和Heroku的自定義域是這樣的:

admin.my_project.my_domain.com -> admin.my_project.my_domain.com.herokudns.com 
api.my_project.my_domain.com -> api.my_project.my_domain.com.herokudns.com 

但是,當我訪問http://admin.my_project.my_domain.com我得到一個路由錯誤404

,並將日誌有這樣的:

heroku[router]: at=info method=GET path="/" host=admin.my_project.my_domain.com request_id=XXX fwd="IP.IP.IP.IP" dyno=web.1 connect=0ms service=3ms status=404 bytes=1744 protocol=http 
app[web.1]: INFO -- : Started GET "/" for IP.IP.IP.IP at 2017-03-14 
app[web.1]: FATAL -- : ActionController::RoutingError (No route matches [GET] "/"): 

這意味着當得到請求時,Rails不知道它是來自子域。

我該如何做這項工作? 謝謝

回答

0

好的,我解決了它。

,我需要把它添加到配置/環境/ production.rb

config.action_dispatch.tld_length = 2 

這樣子域名被正確選擇。