Rails应用程序在不同的计算机上具有多个子域

时间:2014-09-02 09:20:46

标签: ruby-on-rails ruby-on-rails-4

我有一个Rails应用程序,它有3个主要部分:

  • www.example.com:这是主要网站
  • api.example.com:API
  • dashboard.example.com:已注册用户的信息中心界面

我目前在带有命名空间和共享模型的单个rails应用程序中设置它们。我最近接受了RackSpace启动程序的接受,该程序每月给我$ 2000(!)价值的免费云存储,所以我认为我将应用程序分发成更小的部分,以便子域名托管在上单独的服务器

What I'm looking for

如果不将相同的代码部署到3个不同的服务器,我该怎么做?我回顾了this related question,但似乎暗示对所有三个“项目”使用单个Git仓库,我不确定如何部署它。

2 个答案:

答案 0 :(得分:1)

Load Balancer

由于缺乏更多经验,我会说我的直觉告诉我 - 简单地说,你不需要更多的服务器(当然除非你有大量的吞吐量)

你可能最好把它放在SuperUser社区或其他东西上 - 我个人认为你会更好load balancer(虽然我之前从未使用过),给你一个能够跨多个服务器实例分散应用程序的负载。

这将如何工作是超出我的(我从来没有使用过),但我肯定会比尝试在服务器之间拆分应用程序要快得多:

  

负载平衡是一种用于分发的计算机网络方法   跨多种计算资源的工作负载,例如计算机,a   计算机集群,网络链接,中央处理单元或磁盘   驱动器。负载平衡旨在优化资源使用,最大化   吞吐量,最小化响应时间,并避免任何一个过载   资源。使用具有负载平衡的多个组件   单个组件可以通过冗余提高可靠性。

     

负载平衡通常由专用软件或硬件提供,   例如多层交换机或域名系统服务器进程。   负载均衡与该负载中的通道绑定不同   平衡在每个网络上划分网络接口之间的流量   socket(OSI模型层4)基础,而通道绑定意味着a   在较低级别的物理接口之间划分流量,   每个数据包(OSI模型第3层)或数据链路(OSI模型层)   2)基础。

答案 1 :(得分:1)

这里有两个截然不同的目标:

一个是在多台机器上分配负载。您不需要将应用程序分成多个应用程序。您可以使用负载均衡器(传入请求分布在运行相同应用程序的多台计算机上),或者将应用程序拆分。

另一个更多是关于您的应用程序的逻辑架构。一般来说,应用程序越大,它就越复杂,在简单的应用程序上工作就越容易。因此,您可能希望将应用拆分为较小的应用。这与硬件问题是正交的 - 您可以选择将应用程序拆分为三个但仍然在同一台计算机上运行它们(当然它可以让您灵活地以不同的方式为您的应用分配资源)

回到你的问题,值得探讨的一个方面是应该有共享模型吗?在什么程度上(例如)您的仪表板可以查询您的api(可能是私有api)而不是直接查询数据库?将应用程序拆分为多个服务会使某些事情变得更容易,有些事情变得更难,但它确实可以帮助您保持较小的个别应用程序,并保持它们之间的界限清晰,没有任何隐藏的依赖关系。这种逻辑拆分不必与物理布局相对应:一个服务器可以托管多个应用程序

最后,您问题的最直接答案是编写一个rails引擎。引擎几乎可以包含应用程序的任何内容(应用程序是引擎的特殊情况),例如模型,视图,控制器路由等。您可以使用公共代码创建一个,将其打包为gem(不是&# 39; t必须是公共的)并将其添加到每个应用程序的Gemfile中。