2013-05-17 83 views
2

我已經定義了使用設計(會員,company_users等)的幾種類型的用戶,我想爲每種類型的用戶的登錄頁面使用不同的子域名。設計子域路由與設計不工作在heroku

我已經提到this railscast爲了實現子域的匹配和重定向到適當的動作。我routes.rb文件看起來像這樣:

devise_for :company_users, :controllers => { :registrations => 'company_users/registrations', :sessions => 'company_users/sessions' } 

devise_scope :company_user do 
    constraints Subdomain do 
    match '/' => 'company_users/sessions#new' 
    end 
end 

而且我lib/subdomain.rb文件:

class Subdomain 
    def self.matches?(request) 
    request.subdomain.present? and request.subdomain =~ /\Acompanies\z/ 
    end 
end 

在本地,它完美的作品。我已經使用companies.lvh.me:3000進行了測試(正如相同的railscast所示),並且它確實重定向到了正確的登錄頁面。

爲了嘗試使之在Heroku上運行,我添加了域名,使用heroku domains:add companies.mydomain.com,並且我在我的DNS服務器上添加了一個新的CNAME記錄,指向我的Heroku應用程序。

但是,當我嘗試訪問companies.mydomain.com時,它將我重定向到根路徑,而不是正確的登錄頁面。我對發生的事情一無所知。任何幫助將不勝感激。

+1

您的域名擁有與heroku域名相同的域名? Mine是.com.br,並且沒有將config.action_dispatch.tld_length = 2添加到production.rb我得到了相同的行爲,因爲Rails錯誤地檢測了子域。 –

+0

嗯,感謝您的評論!我想這可以是它(我的tld也是br :))。如果它有效,我會要求你將你的評論變成答案,以便我能接受它。 – Renan

+0

@Kadu:將您的評論轉換爲答案 - 此解決方案至少對我有效,應該提高評價。感謝您的協助! – fatty

回答

2

當您的域的tld與heroku域的tld不同時,會發生這種情況。

煤礦是.com.br,我必須補充config.action_dispatch.tld_length = 2〜production.rb,讓Rails可以正確解析URL和重定向到正確的子域。