【发布时间】:2012-05-14 11:52:22
【问题描述】:
我有一个多租户 Rails 应用程序,由 Heroku 托管,地址为 http://myapp.herokuapp.com。租户/帐户通过子域(和 Postgresql 模式)分开。然后,我将自己的域作为自定义域添加到 Heroku 应用程序。由于 Heroku 确实建议不要使用 A 记录,因为“正常运行时间影响”(https://devcenter.heroku.com/articles/avoiding-naked-domains-dns-arecords) 我首先尝试将 CNAME 记录从我的自定义域放到 myapp.herokuapp.com。这也适用于 http://clientaccount.mydomain.com 等子域。
当我的客户希望她自己的域指向他们的帐户时,问题就开始了,因此http://www.clientdomain.com 显示为http://clientaccount.mydomain.com,最明显的解决方案似乎是在我的客户 DNS 中创建一个 CNAME 记录以指向http://clientaccount.mydomain.com。这不起作用,当访问该地址时,一条错误消息指出“该主机名没有配置应用程序”,还有host www.clientdomain.comgave:
www.clientdomain.com is an alias for clientaccount.mydomain.com
clientaccount.mydomain.com is an alias for myapp.herokuapp.com
myapp.herokuapp.com is an alias for ar.herokuapp.com
在 Heroku 提供了一些非常混乱的支持后,他们建议我使用 A 记录而不是指向他们的三个顶级 IP。于是改了,还是不行。然后他们告诉我在我的 Heroku 设置中将我的客户域添加为自定义域,但我没有得到很好的结果。
所以我目前的配置如下:
Heroku 的 Myapp 具有以下自定义域:
*.mydomain.com www.clientdomain.com
mydomain.com DNS
*.mydomain.com 有三个指向 Heroku 顶点 IP 的 A 记录
clientdomain.com DNS
在 clientdomain.com 的 DNS 中,clientdomain.com(不带 www)被重定向到 www.clientdomain.com(不确定他们是如何做到的,但它似乎可以工作。)
对于 www.clientdomain.com,有一条 CNAME 记录指向 clientaccount.mydomain.com
当前状态
www.mydomain.com 正确解析。
clientaccount.mydomain.com 正确解析。
www.clientdomain.com 转到 www.mydomain.com(没有子域)
所以问题显然是在 DNS 中,由于我的应用程序显然没有收到子域,子域是否会消失在某个地方?还是我必须更改 Rails 中的一些代码才能处理这个问题?
子域作为路由约束处理,子域类:
class Subdomain
def self.matches?(request)
request.subdomain.present? && Account.find_by_subdomain(request.subdomain)
end
end
感谢任何输入!
编辑
我已完成建议的所有操作,我是否还必须更改我的应用程序控制器?
application_controller.rb
def handle_subdomain
if @account = Account.find_by_subdomain(request.subdomain)
PgTools.set_search_path @account.id
@current_account = @account
else
@current_account = nil
PgTools.restore_default_search_path
end
end
【问题讨论】:
标签: ruby-on-rails heroku dns hosting