【问题标题】:Code overriding and multitenancy with RailsRails 的代码覆盖和多租户
【发布时间】:2012-05-22 13:46:50
【问题描述】:

我即将使用 Ruby On Rails 构建一个multitenancy 应用程序。每个客户端都将通过 YAML 文件(或最终存储在数据库中的任何东西,无论工作如何)拥有自己的个性化配置。鉴于销售流程和每个客户所需的配置数量,开发团队将构建配置文件。预计客户端数量少于 100 个。

您如何覆盖特定客户端的代码(控制器、视图、布局)(即:每个客户端一个模块?)如何在 Rails 中完成?

【问题讨论】:

  • 您是否考虑过为每个客户提供自己的应用程序和数据库?这将很容易在 heroku 上部署和扩展(基于每个客户端)
  • @Seamus Asbhere 我并不真正关心这个特定应用程序的规模。对于目标市场,我们不可能有规模问题。即使我们这样做了,我们也可以轻松地对数据库进行分区。对于拆分代码库,我认为这太需要维护了,你不觉得吗?
  • 您可以让每个人都脱离主分支的单独部署,直到任何一个客户需要自定义。您将为该客户创建一个分支。然后您可以定期将 master 合并回每个自定义分支。这似乎比在模型、控制器、视图等中放置多个客户端自定义更可靠。

标签: ruby-on-rails ruby-on-rails-3 multi-tenant


【解决方案1】:

您可以为每个客户设置模块,并且在您的控制器内部,您可以动态地需要相应的模块。假设你有 current_user 实例,在 ApplicationCONtroller 中你可以有 before_filter 加载一个实例变量 @client_module 并且该变量可以在你的控制器内部使用来扩展你的控制器。您可能希望为每个控制器的每个客户端执行一个模块,以使生活更轻松

【讨论】:

    【解决方案2】:

    用路由来做这个怎么样?

        get ":client/:controller/:action/:id"
    

    研究 routing from the outside in 以获得一些关于资源和命名空间的想法。

    【讨论】:

      猜你喜欢
      • 2022-10-25
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多