我们有一个Rails 3应用程序,允许用户创建配置文件并使用子域访问它。例如:
现在,假设他们想将自己的域名指向他们的个人资料,因此 www.user1.com 会显示 user1.app.com 和 www .user1.com / my-content / 显示 user1.app.com/my-content / 。他们是否可以简单地更改他们的名称服务器以指向我们,我们处理路由?如果用户不仅要更改其名称服务器而必须进行任何DNS配置,我担心这将是一个交易破坏者。
谢谢!
答案 0 :(得分:15)
这实际上是两个问题。 所以我想我会这样回答。
如何允许客户向我的基于heroku的应用添加自定义域?
因此,在您的示例中,他们的域名为www.user1.com
需要做两件事
www.user1.com
需要添加到您应用的heroku域www.user1.com
的dns需要设置为heroku服务器为了添加这个新域名,我想你需要在应用程序中存储自定义域名, 当它被更改或创建时,确保设置排队任务以将此配置更改推送到heroku。
为了正确执行dns,我希望他们为CNAME
添加user1.app.com
就足够了。
因此,如果您有一个链接到heroku的dns的通配符CNAME,则可以避免在Heroku再次进行DOS操作时可能发生的停机类型。
如何基于域显示内容,而不仅仅是子域?
嗯,不知怎的,你已经将user1.app.com
与user2.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
答案 1 :(得分:12)
首先需要让他们让他们设置www.user1.com指向proxy.heroku.com(或者设置你自己的cname条目到proxy.heroku.com并让他们将域名命名为)然后你需要用你的heroku应用程序注册他们的自定义域名,以便正确的应用程序响应他们的帐户存储的Heroku?在你的应用程序中,它可以匹配传入的请求。
这种技术在Locomotive Rails CMS中使用,所以我建议看一下 - 它使用Heroku gem INSIDE 应用程序,因此可以通过站点管理员添加自定义域,然后进行会谈到Heroku API将自定义域添加到应用程序。