如何在不更改代码的情况下将单站点应用程序转换为可持续发展的多站点应用程序?

Ale*_*dre 5 ruby database-design web-applications ruby-on-rails

这是我们在办公室内部使用的应用程序,我希望将其作为托管服务提供给任何人.

如果不进行重大代码更改,我该怎么做?

我遇到的第一件事就是让应用程序根据域选择要连接的数据库.

因此,应用程序的每个实例都有自己的数据库,但所有实例都将共享相同的代码.

代码所需的唯一更改是数据库选择.

这种方法可以维持吗?我听说wordpress.com这样做,它提供了一些优势.我主要是希望这样做,以避免将我的整个数据库查询范围扩展到同一数据库中的某个站点.

谢谢!

EmF*_*mFi 2

最简单的方法是克隆应用程序,并创建另一个服务器实例来处理它。这实际上是我在服务器上处理多个 WordPress 博客的方式

专业人士:

  • 该过程可以简化为实用程序脚本。
  • 如果符号链接用于公共代码,则可以轻松维护。IE:除了品牌和配置目录中的一些内容之外的所有内容。

缺点: - 如果您使用乘客,则需要为每个新实例重新启动 apache。- 如果您使用 Apache 将不同虚拟主机上的子域路由到不同的混合集群,则相同。

然而,更好的方法来自这个问题:Rails - 每个子域单独的数据库

接受的答案中的方法更加稳健。它可能需要比您想要的更多的更改,但它具有所有优点,并且没有任何其他方法的缺点。每个新实例都需要在主数据库中添加一个新条目,其中包含表名和其他实例特定信息。您还需要自定义 rake 任务来为每个新实例构建数据库。