Rails - 具有定制框架的多租户应用程序

2023-12-07

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

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

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

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

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


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

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

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

class User < ActiveRecord::Base
  belongs_to :site
end

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails - 具有定制框架的多租户应用程序 的相关文章

  • 将对象数组转换为 ActiveRecord::Relation

    我有一个对象数组 我们称其为Indicator 我想运行 Indicator 类方法 def self subjects该数组上的种类 范围等 我知道在一组对象上运行类方法的唯一方法是让它们成为 ActiveRecord Relation
  • jruby-openssl 中已初始化常量

    当在 Torquebox 上运行我的 Rails 应用程序时 我得到了很多 already initialized constant 警告源自gems jruby openssl 0 8 2 lib shared jruby openssl
  • Windows 上的 ruby​​ 中出现 SSL 错误

    我收到以下错误 C Users user Desktop folder gt ruby exchange rate rb C Ruby23 x64 lib ruby 2 3 0 net http rb 933 in connect nonb
  • 对于所有 mime 类型,仅respond_to format.js

    我有一个响应 format js 的控制器 但是 大多数请求假设旧的 format html 仍然存在并抛出 404 异常 如何捕获控制器上的所有 MIME 请求并将它们仅重定向到 format js 这是当前控制器的操作 def sear
  • 为什么 npm install 失败并出现与 node-sass 相关的错误?

    我正在使用我继承的 Rails 应用程序 我正在尝试运行npm install命令但我不断收到errors以下 我尝试跑步npm rebuild node sass正如输出中所建议的 但它没有帮助 我遇到这个问题乌班图16也OS X gt
  • ruby:类实例变量与实例变量

    我的想法是为来自不同国家的人们创建一个社区维基java因为读了很多解释 我无法理解任何东西 直到我真正尝试了一些东西 拼图的各个部分开始找到它们的位置 但我首先需要确保我做对了 来自这样的背景 我很困惑地发现 variable可能意味着两个
  • before_filter set_locale 除了控制器

    My routes rb MyApp Application routes draw do scope locale do all resources here end namespace blog do resources posts o
  • 设计没有路由与指定删除的链接中的 [GET]“/users/sign_out”匹配

    因此 我四处寻找解决此问题的方法 大多数人似乎都说了同样的话 但对解决我的问题没有多大作用 我已在链接中指定了删除方法 但路由错误表明这是一个 GET 请求 知道为什么下面的链接最终会覆盖 忽略方法声明吗 Routes devise for
  • 如何在没有 sudo 的情况下安装 gem

    在我所有的 gem 安装中 我必须执行 sudo 所以 sudo gem 安装rails 会起作用 而只有 宝石安装导轨 不管用 我该如何补救 我安装了rvm murtaza murtaza dev which rvm home murta
  • 如何在 Rails 应用程序中选择性地跟踪方法及其文件访问?

    对于 Rails 应用程序 我想重载或修改 Kernel load 以便它打印出完整路径 例如puts gt File expand path File dirname FILE File basename FILE 对于加载的每个 Rai
  • 将 mongoid 会话设置为只读

    我有不同的会话mongoid yml 其中一个会话提供来自静态 mongo 数据库的数据 我想知道是否有可能以只读模式 加载 会话 以便不进行任何更改save create destroy or destroy all可以制作 我的mong
  • ActiveStorage::FileNotFoundError 但文件确实存在

    我正在开发这个 Rails 6 0 21 应用程序 ruby 2 5 5 并使用 puma 3 12 2 作为开发 Web 服务器和具有本地磁盘服务的 ActiveStorage 我的应用程序时不时地出错ActiveStorage File
  • 使用 mongodb-reactive 的反应式 Spring boot 应用程序中的多租户

    我们如何使用 Mongodb reactive 存储库在 spring webflux 中创建多租户应用程序 我在网上找不到任何有关反应式应用程序的完整资源 所有可用资源均适用于非反应式应用程序 UPDATE 在非响应式应用程序中 我们过去
  • 获取类别和子类别的所有产品(rails、awesome_nested_set)

    正在开发一个电子商务应用程序 我试图解决以下问题 我通过 Awesome nested set 插件实现了我的类别 如果我通过选择一个类别列出我的文章 一切正常 但对于某些链接 我想显示一个类别的所有产品及其子类别的产品 这是仅适用于一种类
  • 如何在 jQuery.ui.autocomplete 中的自动完成弹出窗口下方添加所有搜索的链接?

    我有使用 jQuery UI 自动完成插件的搜索建议自动完成功能 http jqueryui com autocomplete http jqueryui com autocomplete 但是如何添加结果弹出项目的底部 其行为类似于 Qu
  • 国家/地区的下拉菜单

    您好 我想为国家和州实现下拉菜单 州下拉列表应根据所选国家 地区更改其值 有没有任何插件或 gem 可以在 Rails 中执行此操作 尝试卡门插件 http autonomousmachine com posts 2009 4 1 carm
  • Rails:has_many:通过还是has_many_and_belongs_to?

    我有一个应用程序 我想通过另一个模型将一个模型的实例链接到同一模型的另一个实例 即 Task1 gt Relationship 基本上 关系模型将具有额外的信息 关系类型 滞后 因此将其作为连接模型是理想的 然而 并没有两个模型可以加入 只
  • 使用 Rails3-autocomplete gem 时出现“自动完成方法不存在”错误

    在我的rails应用程序中 我尝试使用rails3 jquery autocomplete gem 我在 Gemfile 中包含了以下行 gem Rails3 jquery autocomplete 并提供捆绑安装及其在 gems 中列出
  • Heroku 带宽和空间

    Heroku 对于免费应用程序支持多少流量带宽和磁盘空间 Heroku 免费版有一个 5 MB 的数据库和 1 个 dyno dyno 是运行并响应请求的应用程序的实例 此外 您的 slug 的大小有 100 MB 的限制 这包括您使用的所
  • RVM 要求错误

    我安装了 OS X Mavericks 并且正在尝试运行rvm requirements在终端中 它给了我这个错误 Installing required packages autoconf automake libtool pkgconf

随机推荐