gpt4 book ai didi

ruby-on-rails - Rails - 具有自定义框架的 Multi-Tenancy 应用程序

转载 作者:数据小太阳 更新时间:2023-10-29 08:13:44 29 4
gpt4 key购买 nike

我正在使用单个代码库/应用程序组织一个 Multi-Tenancy 应用程序,使用子域来检测租户,然后在 postgres 上运行 SET SCHEMA 来做一些有趣的事情。

我的问题是某些客户需要对主代码库进行不同级别的定制。不是很多,但肯定足以让我不想通过添加一堆 if 语句来开始破解主要模型和 Controller 。

通过 View 加载路径覆盖 View 非常容易...但我的问题是:我如何提供一个良好的框架来覆盖或向基本 Controller 、模型和助手添加功能以根据需要为每个租户调整内容?理想情况下,它应该是非常无缝的,不会侵入主代码,并且应该提供一个合适的机制来组织自定义代码。

我研究了几个选项,包括使用包含/扩展(混合)。问题是在生产中,方法保留在对象中(可以理解)。我已经尝试过 hte mixology gem 来解决这个问题,但它并没有完全按照我的预期工作,而且它比我想要的更具侵入性,我也不清楚如何将它与模型联系起来(在 Controller 中,我刚刚尝试通过前/后过滤器进行混合/取消混合)。

如果有人对如何最好地处理/解决此问题有任何想法,我将非常感谢您的反馈。 FWIW 这是 Rails3

最佳答案

如果您谈论的是在请求之间动态切换数据库,那么我认为您将陷入困境,至少在使用 ActiveRecord 时是这样。这会严重扰乱缓存系统,因为它会根据 ID 而不是 ID + 架构来记住内容,这可能会导致交叉污染。

一般来说,从架构的角度来看,最好在内部对数据库进行分区,并相应地确定每条记录的范围。例如:

class Site < ActiveRecord::Base
# Represents a site or installation of the application
end

class User < ActiveRecord::Base
belongs_to :site
end

将所有内容链接到主要的 Site 记录,或者任何最能描述您用于分区的方法的术语。保持一致的范围比切换架构要容易得多。

如果出于扩展的原因,您希望将来拆分数据库,如果您小心地使用一致的 site_id 列标记站点的所有关联记录,您可以轻松地将所有这些记录转移到一个新的数据库中。

关于ruby-on-rails - Rails - 具有自定义框架的 Multi-Tenancy 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5858946/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com