【问题标题】:Custom views and assets for tenants in a multi-tenant rails app?多租户 Rails 应用程序中租户的自定义视图和资产?
【发布时间】:2015-08-22 13:24:36
【问题描述】:

使用 Rails 引擎时,覆盖视图就像在正确的文件夹中创建新视图一样简单。但是,当创建一个所有租户都驻留在同一个应用程序中(他们不使用引擎)的多租户 Rails 应用程序时,如何覆盖租户的视图。

例如:

应用有一个views/static/about_us.haml 文件,需要为每个租户定制。为每个租户覆盖此文件的最佳方法是什么?

【问题讨论】:

  • 看名字,好像是完全可以自定义的页面。在应用一些健全性检查以防止 XSS 等之后,我会以某种丰富的形式保存租户的自定义页面;并在没有 HTML 转义的情况下显示它。否则,例如如果有几个定义明确的租户,则每个租户都有不同的文件/文件夹:views/tenant1/static/about_us.hamlviews/tenant2/static/about_us.haml

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-4.2 multi-tenant


【解决方案1】:

我使用apartment gem,它非常适合管理多租户环境。 Apartment 可帮助您管理基于模式的数据库并帮助您进行迁移。

应用根据子域使用正确的架构。例如,在 superclient.mysuperapp.com 的情况下,rails 将使用 superclient 数据库架构,并且将仅在此架构上工作,直到请求完成。

对于多租户视图,我在 ApplicationController.rb 中使用 before_action 来预先添加我的自定义视图路径:

def prepend_view_paths
  subdomain = request.subdomain
  prepend_view_path "app/views/multitenancy/#{subdomain}"
end

这里的子域是超级客户端。

逻辑是这样的:首先,rails 会在这个路径中寻找一个视图:“app/views/multitenancy/#{subdomain}”。如果它没有找到任何东西,它会继续在列表中的其他路径中查找视图。

希望我的回答对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2018-08-29
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多