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