2011-06-15 74 views
15

我們有一個Rails 3應用程序,它允許用戶創建一個配置文件並使用子域訪問它。因此,例如:通過顯示不同內容的名稱服務器指向單個Heroku Rails應用程序的多個域?

  • user1.app.com
  • user2.app.com
  • user3.app.com

現在,假設他們希望自己的域名指向自己個人資料,因此www.user1.com顯示user1.app.comwww.user1.com/my-content/顯示user1.app.com/my-content/。他們是否可以簡單地改變他們的名字服務器來指向我們,我們處理路由?如果用戶不得不進行任何DNS配置而不僅僅是改變他們的域名服務器,恐怕這會成爲一種破壞。

謝謝!

回答

11

你需要讓他們首先得將它們設置www.user1.com指向proxy.heroku.com(或設置自己的CNAME進入proxy.heroku。並讓他們爲他們的域名cname),然後你需要註冊他們的自定義域名與你的heroku應用程序,所以正確的應用程序響應Heroku存儲在他們的帳戶?在你的應用程序中,所以它可以匹配傳入的請求。

這種技術應用在機車Rails的CMS所以我建議在看 - 它使用Heroku的寶石INSIDE的應用程序,以便自定義域可以通過網站管理員可以添加這反過來會談Heroku的API將自定義域添加到應用程序。

+0

如果用戶的域名已經註冊到另一個heroku應用程序,這是不可能的權利? – stuartchaney 2014-10-08 16:37:58

14

這實在是兩個問題。 所以我想我會這樣回答。

我該如何讓客戶將自定義域添加到我的基於heroku的應用程序?

所以,在你的榜樣,他們的域名是www.user1.com

有兩件事情需要發生

  1. www.user1.com需要被添加到您的Heroku領域的應用
  2. 的DNS進行www.user1.com需要設置爲heroku服務器

爲了添加這個新的domai n,我猜你需要將自定義域名存儲在應用程序 中,並且在更改或創建時,確保已設置排隊任務以將此配置更改推送到heroku。

爲了正確使用dns,我希望他們爲user1.app.com添加CNAME就足夠了。 因此,如果您有一個通配符CNAME鏈接到heroku的dns,則可以避免Heroku再次獲得DOS-ed時可能發生的停機類型。

如何顯示基於域的內容而不僅僅是子域?

好,不知爲何,你已經區分user1.app.comuser2.app.com

也許你只是嗅了嗅request.host。 現在您只需先嚐試自定義域。

也許這會工作。

before_filter :set_client 

def set_client 
    @client = Client.find_by_custom_domain(request.host) || Client.find_by_subdomain(request.host.split(".").first) 
    unless @client 
    raise "unrecognised domain #{request.host}" 
    end 
end 
+0

這真的很有用。謝謝! – 2011-09-10 11:46:31

相關問題