Rails一个包含多个Apps / Domains的数据库

时间:2015-05-05 02:49:28

标签: ruby-on-rails postgresql devise

我正在努力设置一个公司的所有部分的多个网站。我正在使用nitrous.io进行开发。我读过你可以在生产中使用一个DB。我是否也需要在开发方面做到这一点?不知道怎么做。

要使用的非法盒子/域上的文件结构

  • 帐户/(user.site1.com& user.site2.com)
  • Admin /(admin.site1.com)
  • 购物/(shop.site1.com& shop.site2.com)
  • Site1 /(site1.com)
  • Site2 /(site2.com)

我将为帐户使用设计,并希望实现跨站点登录。已经考虑了一些。

从我所看到的内容来看,有点像其他帖子所涵盖的内容比我想要的更多,并且可以成为PITA。听起来好像如果不止一个站点需要修改相同的表,它会变得复杂。事实并非如此。一个站点可以编辑给定的表,但其他站点需要访问该表。

任何提示将不胜感激。

伊恩

2 个答案:

答案 0 :(得分:2)

您绝对不希望多个网站都与同一个数据库通信。这是混乱的秘诀。以下是可能出错的几个例子......

  1. 站点1与站点2同时更新表,并且存在关于应保存哪些数据的冲突。
  2. 您更新站点1上的代码以向表中添加新列。您对站点2执行相同操作,但站点2的更新崩溃,因为已添加新列(按站点1)。
  3. 一个站点试图在另一个站点删除它之后读取一条记录,并且存在冲突。
  4. 等。 (我确信你可以想到更多的案例)
  5. 但一切都没有丢失!!!

    您需要做的是创建一个服务器,该服务器是其他站点的API。您的所有站点都将调用此单个服务器进行所有更新,并且该单个服务器将是唯一与数据库通信的服务器。

    您的API将有一些基本操作 - 一个用于创建新记录,一个用于记录,一个用于更新记录,另一个用于删除记录。

    您可以从http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default查看Rails资源文档开始 - 它介绍了如何自动生成基本CRUD API。 CRUD btw代表创建,读取,更新和删除 - 您将要执行的基本功能。

    稍后,您可以通过API获得更多创意,并展开以添加更多功能。假设每次创建订单时,都需要采取几个步骤。您可以做的是在您调用的API中创建一个路由,并且该路由的控制器会进行所有必要的更新。基本上,每当您发现自己为每个站点编写代码时,每次都会生成相同的API调用集,您应该考虑在API中创建一个新的路由来进行该调用。

    API的另一个优点是,它可以让您对想要数据库和操作的内容有所了解。

    您可以先将基本API放在一起,然后只编写一个网站。让它工作,然后添加另一个。考虑使用Google搜索“Rails restful API”以获得一些好的参考,祝你好运!

答案 1 :(得分:0)

Rails用户通常在一个数据库中使用多个schemas,以防多个应用程序"是一个多个版本的应用程序 - 例如" customer2.mycompany.com"," customer3.mycompany.com"等。这通常被称为"多租户"托管。

您可以查询共享表和用户/站点/产品特定表,使用search_path控制哪些表。

注意:

这种方法也适用于多个应用访问共享数据的情况,但只有当所有应用共享相同的代码才能访问共享数据时,它才能正常运行。这可以是一个Web API(根据Tim的回答),一个提供函数或对象的库,或者它可以是一个带有视图和过程的数据库级API。 (对于Rails,只有一个Web API或库可以正常工作,Rails往往对基于视图和过程的接口处理得很差。)

如果每个应用都有自己的代码来访问共享数据,那么您将浪费时间和精力 - 而且您还会将维护变成一场噩梦。每次您必须以任何方式更改共享数据的结构时,您都必须更新所有应用程序。