首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails -具有自定义框架的多租户应用程序

Rails -具有自定义框架的多租户应用程序
EN

Stack Overflow用户
提问于 2011-05-02 23:20:31
回答 2查看 1.1K关注 0票数 3

我正在组织一个具有单个代码库/应用程序的多租户应用程序,使用子域来检测租户,然后在postgres上运行一组模式来做有趣的事情。

我的问题是,某些客户端需要对主代码库进行不同级别的定制。不是很多,但肯定足够了,我不想通过添加一堆if语句来开始修改主要的模型和控制器。

使用视图加载路径覆盖视图非常简单……但我的问题是:我如何才能提供一个好的框架来覆盖或添加基本控制器、模型和帮助器的功能,以便根据需要调整每个租户的内容?理想情况下,它应该是非常无缝的,并且不会侵入主代码,并且应该为组织定制的代码提供一种合适的机制。

我研究了一些选项,包括使用包含/扩展(mixins)。问题是,在生产中,方法停留在对象中(可以理解)。我尝试过混搭gem来解决这个问题,但它并不完全像我预期的那样工作,而且它比我希望的要更具侵入性,我也不清楚如何将它与模型联系起来(在控制器中,我刚刚通过之前/之后的过滤器尝试了混入/解混)。

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

EN

回答 2

Stack Overflow用户

发布于 2011-05-03 00:23:24

如果你谈论的是在请求之间快速切换数据库,那么我认为你将面临一个痛苦的世界,至少在使用ActiveRecord的时候。这将严重扰乱缓存系统,因为它基于ID而不是ID + Schema来记忆内容,这可能会导致交叉污染。

通常,从体系结构的角度来看,最好在内部对数据库进行分区,并相应地限定每条记录的作用域。例如:

代码语言:javascript
复制
class Site < ActiveRecord::Base
  # Represents a site or installation of the application
end

class User < ActiveRecord::Base
  belongs_to :site
end

将所有内容都链接到主Site记录,或者任何可以最好地描述用于分区的方法的术语。维护一致的作用域要比切换模式容易得多。

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

票数 0
EN

Stack Overflow用户

发布于 2011-06-15 11:33:51

一个钩子+插件的设置能满足你的需求吗?例如:将附加功能构建到另一个模型中,在任何需要修改的操作上检查钩子表,看看用户是否需要任何额外的操作,钩子表还指定了要采取的操作,以便您可以轻松地为不同的用户设置不同的配置。

如果你找到了更好的答案,请更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5858946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档