ruby-on-rails - 使用 Apartment gem 将单个租户应用程序转换为多租户应用程序
问题描述
我已经构建了一个单租户 Rails 应用程序,其中所有核心功能都已准备好发布。但我现在想使用公寓 gem使其成为多租户。我发现的大多数教程都展示了如何从头开始。但是我没有找到关于如何将现有项目转换为内置多租户的指示。根据我的研究,我发现所有模型都需要在迁移中添加租户 ID。如何轻松地将其添加到所有现有模型中?安装 gem 并运行生成器就足够了吗?我正在运行一个rails 5
包含近 30 个模型的 API 应用程序,并在一个环境中使用graphql
ruby 。Ubuntu 18.04
关于如何做到这一点的任何想法?
解决方案
感谢@lacostenycoder 为我指明了正确的方向。这就是我所做的。
简短回答:是的,安装 gem、运行生成器和创建租户模型就足够了。Apartment 读取您的架构并为租户创建架构。
长答案,我的经验:
- 我备份了数据库中的现有数据以防万一。
- 安装的公寓宝石
如果您像我一样使用任何 PostgreSQL 数据库扩展(pgcrypto、uuid-ssop),您需要了解扩展不会自动加载到新创建的模式中。(查看此处了解更多详细信息)执行以下操作:
- 按照github 自述文件的说明创建
shared_extensions
架构 - 创建您的第一个租户。如果它有效,一切都很好。但...
- 如果这不起作用,我的意思是当您创建租户时,您会收到类似的错误
ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: function gen_random_uuid() does not exist
或者
ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: function uuid_generate_v4() does not exist
(更多细节在这里,这里和这里)就像我在创建我的第一个租户时的情况一样,我发现一旦在public
架构上启用了扩展,在这种情况下它们就不能安装在共享架构shared_extensions
中。因此,您必须将它们从公共架构更改为shared_extensions
架构。在此处获取更多详细信息如果你在
ALTER EXTENSION "uuid-ossp" SET SCHEMA shared_extensions
你的rails dbconsole
- 如果你在
ALTER EXTENSION "pgcrypto" SET SCHEMA shared_extensions
你的rails dbconsole
- 按照github 自述文件的说明创建
正确设置并创建第一个租户后,公寓 gem 将为您的租户创建所有模型。
欲了解更多信息,请查看有关公寓的这些 github 问题。这里和这里。我花了一天时间弄清楚并收集这些信息。我希望它可以节省您的时间和头痛!
推荐阅读
- c# - 焦点移动 ListBox 时,不选择同一窗口上的多个 ListBox
- javascript - Javascript骰子游戏:如何根据骰子结果删除HP?
- php - php中的数学问题
- sql-server - SQL Server 2008 结果透视
- vue.js - 我对 Vue 组件结构有一些疑问
- html - 如何在html中显示当地时间?
- javascript - 在节点js中获取json变量的嵌套属性
- linux - 禁用 TTY 中的行缓冲但保持启用 Ctrl+D
- java - Cant get Extras from intent when application is in background
- python - 多次拆分字符串并将结果作为新的DataFrame返回