sam*_*l02 1 dns hosting ruby-on-rails heroku
我有一个多租户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时,问题就出现了,最明显的解决方案似乎是在我的帐户中创建一个CNAME记录客户端DNS指向http://clientaccount.mydomain.com.这不起作用,当访问地址时出现错误消息"没有在该主机名配置应用程序"时,也host www.clientdomain.com给出了:
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
Run Code Online (Sandbox Code Playgroud)
在Heroku的一些非常困惑的支持之后,他们建议我使用A记录而不是指向他们的三个顶点IP.所以改了它但它仍然没有用.然后他们告诉我在我的Heroku设置中将我的客户域添加为自定义域,我没有做好结果.
所以我目前的配置如下:
*.mydomain.com www.clientdomain.com
*.mydomain.com有三条指向Heroku顶点IP的A记录
在clientdomain.com的DNS中,clientdomain.com(没有www)被重定向到www.clientdomain.com(不确定他们是如何做到的,但似乎有效.)
对于www.clientdomain.com,有一条指向clientaccount.mydomain.com的CNAME记录
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
Run Code Online (Sandbox Code Playgroud)
任何输入都表示赞赏!
我已经完成了所有建议,我是否也必须更改我的应用程序控制器?
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
Run Code Online (Sandbox Code Playgroud)
小智 5
这里最好的选择是首先设置您的主域名如下:
*.mydomain.com 作为CNAME来 heroku-appname.herokuapp.com
并添加*.mydomain.com为您的应用程序的域名:
$ heroku domains:add *.mydomain.com
Run Code Online (Sandbox Code Playgroud)
下一步您需要为用户/客户设置一种简单的方法,将他们的自定义域添加到您的多租户应用程序中.这需要两件事,将域名添加到您的应用并让他们设置DNS.这是最好的方法:
添加www.myclientdomain.com到您的应用:
$ heroku domains:add www.myclientdomain.com
Run Code Online (Sandbox Code Playgroud)
然后设置DNS指向Heroku.你最好从Heroku的设置中吸取教训,让你的客户CNAME成为你拥有的域名.这有助于避免锁定,并让您更好地控制您指导流量的位置.所以:
CNAME www.myclientdomain.com到proxy.mydomain.com
该CNAME将遵循proxy.mydomain.com以heroku-appname.herokuapp.com然后解析为IP地址的Heroku.
那么你应该全力以赴.
理想情况下,您可以更快地使用自定义域来吸引新客户,而不是手动添加域名,因此您需要自动执行该步骤.使用heroku api和客户端,您可以在应用程序中以编程方式管理自定义域.
| 归档时间: |
|
| 查看次数: |
3652 次 |
| 最近记录: |