Ruby on rails Rails、Heroku和子域。我的特例场景可行吗?
以下是我的场景: 我有一个必须支持多个客户端的应用程序。每个客户端都将获得一个子域,用于该服务。我们还将有一个没有应用程序的宣传册网站,它只是一个关于产品以及潜在客户如何与我们建立帐户的网站 给定:Ruby on rails Rails、Heroku和子域。我的特例场景可行吗?,ruby-on-rails,dns,heroku,subdomain,Ruby On Rails,Dns,Heroku,Subdomain,以下是我的场景: 我有一个必须支持多个客户端的应用程序。每个客户端都将获得一个子域,用于该服务。我们还将有一个没有应用程序的宣传册网站,它只是一个关于产品以及潜在客户如何与我们建立帐户的网站 给定: www.mycolsite.com会指向Heroku上的一个小册子应用程序。 client1.mycoolsite.com、client2.mycoolsite.com和client3.mycoolsite.com都指向同一个SaaS应用程序,该应用程序可以分辨每个请求之间的差异,我应该能够处理这些
www.mycolsite.com
会指向Heroku上的一个小册子应用程序。
client1.mycoolsite.com
、client2.mycoolsite.com
和client3.mycoolsite.com
都指向同一个SaaS应用程序,该应用程序可以分辨每个请求之间的差异,我应该能够处理这些请求,以便它们只能看到自己的日期(即设置全局客户端id
或类似的内容)
我该怎么做呢?我没有做过很多关于DNS的工作,所以我不知道从哪里开始
谢谢 我不认为这是个问题。Rails过去在subdomain_-fu等gems的帮助下支持类似的子域。在Rails 3中,子域支持实际上是内置的,由Ryan Bates负责。请看一下该屏幕广播,了解从何处开始的好方向。
我相信您需要Heroku的自定义域附加组件。这不会有问题。对于DNS,为MyColSite.com设置一个A记录,指向您想要应用程序的服务器。为heroku配置的
www.mycoolsite.com
设置A记录。现在,您还需要重定向在mycolsite.com
上没有www的流量,并重定向到www.mycolsite.com
,这将使您的顶级域名为您的手册应用程序提供服务。一旦请求到达您的应用程序,您可以按照raidfive链接的教程进行操作,该教程将帮助您处理应用程序内部的子域。您尝试的操作非常可行,而且非常容易
您需要一组a
和CNAME
记录。简单地说,A
记录将主机名映射到IP地址,CNAME
记录充当A
记录的别名
假设您的SaaS应用程序位于10.0.0.1
,Heroku应用程序位于192.168.0.1
,并且您希望www.mycolsite.com
和mycolsite.com
指向同一IP
(注意:我从未在Heroku托管过任何东西,因此配置DNS可能略有不同)
您首先需要的是域本身的记录。(我在这里使用过-希望您的DNS提供商有一个更简单的管理系统。)
这两个记录告诉我们,mycolsite.com
应该指向Heroku的IP地址,www.mycolsite.com
是mycolsite.com
的另一个名称,它也将解析为Heroku的IP地址
现在,让我们为您的SaaS站点设置DNS。您可以为每个子域设置一个A
记录,但是如果您移动服务器,您将有很多IP地址需要更新。最简单的选择是配置一条A
记录,然后将应用程序的子域指向该记录:
sassapp A 10.0.0.1 ; saas app server canonical name
client1 CNAME sassapp ; alias
client2 CNAME sassapp ; alias
client3 CNAME sassapp ; alias
然后,您可以根据需要添加任意数量的CNAME。不用担心。我们现在在Heroku这样做。我们碰巧使用Godaddy作为域注册器,但是任何DNS控制面板都会让您做同样的事情
我在这里读到的其他解释有点笼统,这里是细节
heroku的解释非常好,在:
(甚至有一个非常好的一步一步的放映)
关键是,如果您的根域(mycolsite.com)位于Heroku,您需要创建三个“A”记录,因为它们具有容错交叉功能。所以你会有一张
75.101.163.44
75.101.145.87
174.129.212.2
现在为每个子域创建一个CNAME记录
www -> proxy.heroku.com
client1 -> proxy.heroku.com
client2 -> proxy.heroku.com
client3 -> proxy.heroku.com
现在在HEROKu方面,你有两个应用程序,对吗?“宣传册应用程序”和saas应用程序
登录,对于每个应用程序,进入资源->插件->获取更多插件->自定义域(免费)
对于宣传册应用程序,添加一个域:www.mycolsite.com
对于saas应用程序,添加每个客户端,例如:
client1.mycoolsite.com
client2.mycoolsite.com
client3.mycoolsite.com
就这样。像冠军一样工作。玩得开心。哇,谢谢你的详细回答,+1。我会尝试一下,当我今天抽出时间做这件事时,我很可能会接受这个答案如果你的网站的公共地址没有www
,比如twitter.com
而不是www.twitter.com
,并且你想做你所说的事情(两个应用,一个是“主”应用,另一个是登台应用),你能有这样的site.com
和staging.site.com
吗?这应该像上面一样在Heroku开发中心上,以文本形式,而不仅仅是视频格式。您好,我发现这非常有用,但是,我的应用程序会自动创建用户子域。因此,一旦我的客户注册到我的应用程序中,我就会自动创建myclient.myapp.com……这是否意味着我必须为我的每个客户手动创建一个C记录?@jalagrange你应该能够使用Heroku的通配符子域来实现这一点,不过每月的费用是5美元。+1用于railscasts插曲。我在发布这篇文章之后就看了,发现它真的很有用+1讨论A
和CNAME
记录。我需要更多地了解他们,谢谢!我也有这个问题,还没有找到解决方案(即使联系heroku支持部门)。我找到的最接近的答案与jpwynns的答案相同,但是如果你让人们通过注册页面注册SaaS应用程序的子域,那么该页面还需要将子域添加到你的heroku应用程序中(你不能使用通配符,因为它会与你的www冲突,heroku不允许)。应用程序和主机之间的这种紧密耦合的集成可能并不可取。如果有人这样做
client1.mycoolsite.com
client2.mycoolsite.com
client3.mycoolsite.com