这是我们在办公室内部使用的应用程序,我希望将其作为托管服务提供给任何人。
如果不进行重大代码更改,我该怎么做?
我遇到的第一件事就是让应用程序根据域选择要连接的数据库。
因此,应用程序的每个实例都有自己的数据库,但所有实例都将共享相同的代码。
代码所需的唯一更改是数据库选择。
这种方法是否可维护?我听说wordpress.com这样做,它提供了一些优势。我主要是希望这样做,以避免将我的整个数据库查询范围扩展到同一数据库中的某个站点。
谢谢!
答案 0 :(得分:2)
最简单的方法是克隆应用程序,并创建另一个服务器实例来处理它。这实际上就是我在服务器上处理多个wordpress博客的方式
亲:
<强>缺点:强> - 如果您正在使用乘客,则需要为每个新实例重新启动apache。 - 如果您使用Apache将不同虚拟主机上的子域路由到不同的mongrel集群,则相同。
然而更好的方法来自问题:Rails - Separate Database Per Subdomain
接受的答案中的方法更加健壮。它可能需要比您正在寻找的更多变化,但它具有所有好处,没有任何其他方法的缺点。每个新实例都需要master数据库中的新条目以及表名和其他特定于实例的信息。您还需要自定义rake任务来为每个新实例构建数据库。
答案 1 :(得分:0)
我建议切换数据库连接并根据域添加view_path,我已在this question中发布了代码。
我希望这有帮助!
答案 2 :(得分:0)
我不会像你提到的那样使用多个数据库。保持所有模式/迁移与所有数据库同步可能会变得很痛苦。
我会考虑简单地将它变成一个多租户应用程序,你有某种“帐户”模型,然后你所有现有的模型都限定它...换句话说,如果这是一个博客应用程序,你的帐户has_many:帖子等
通过这种方法,您可以按子域识别帐户...让人们在创建帐户时选择他们的子域并从那里开始。
这很简单。如果您需要在合并中添加结算,则可以查看SaaS Railskit(处理所有注册和子域名)或Chargify。
识别Twitter风格的帐户