问题标签 [apartment-gem]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails-4 - 在 Rails 中构建多位置应用程序
我正在尝试从客户端构建一个多位置应用程序。我曾尝试涉足公寓和其他类型的多租户,但没有收到正确的结果。
该应用程序应具有每个位置的域,如下所示:
例如 example.com/newyork、example.com/boston
我不能使用子域,因为它们将用于语言。
例如 en.example.com/newyork、es.example.com/newyork
每个位置都有一个模型,仅显示该位置的内容和搜索功能。
例如,在纽约时,不会显示波士顿的帖子,而在波士顿时,不会显示纽约的帖子。
但是,用户可以单点登录所有位置和语言,并且无论位置如何,用户都可以查看应用程序中发布的所有内容。如果我使用多租户,用户只能在 /newyork 上查看纽约的帖子,而在 /boston 上的时候只能查看波士顿的帖子,这不是预期的结果。
我应该在这里遵循什么方法?多租户甚至有意义吗?
mysql - Rails - 公寓 - MySQL 删除租户数据库
我正在使用公寓 gem 和 MySQL 作为数据库在 Rails 中创建一个多租户应用程序。我在https://gorails.com/episodes/multitenancy-with-apartment之后设置了公寓。
在此之后,每当我创建一个新的子域时,都会为每个子域创建新的数据库。现在,如果我执行 rake db:drop,它只会删除主数据库,所有子域数据库都保持不变。
我的查询是如何删除子域数据库。
ruby-on-rails - 跨租户的公寓活跃记录查询
我使用公寓进行多租户。有什么方法可以跨所有租户运行查询,而不仅仅是我当前的租户?
一种令人讨厌的方法是
我不确定切换租户的副作用是什么,如果有某种方法可以将租户设置为查询级别,那就太好了。
ruby-on-rails - 创建新租户公寓 Gem - 总是重新启动?
我有一个使用 Apartment gem 的 rails 4.2 多租户应用程序,非常棒。
每个公司都有自己的子域。我正在使用一个自定义的“电梯”,它查看完整的请求主机以确定应该加载哪个“租户”。
当我创建一家新公司时,我有一个 after_create 挂钩来创建具有正确请求主机的新租户。
这似乎总是需要在开发和生产中重新启动服务器,否则我会收到 Tenant Not Found 错误。
它在开发中使用 sqlite,在生产中使用 postgres。
每次创建新租户时,我真的必须重新启动服务器吗?有没有一种自动化的方法来做到这一点?也许只是重新加载初始化程序就可以了,但是我不确定该怎么做/如果可能的话?
我已经搞砸了一个月,一直找不到有效的解决方案。请帮忙!
初始化程序/公寓.rb
初始化程序/host_hash.rb
公司模式
什么最终起作用
我更改了电梯配置,以摆脱公寓宝石中的 HostHash 配置,并使用了完全自定义的配置。主要基于公寓 gem github 上的一个问题:https ://github.com/influitive/apartment/issues/280
初始化程序/公寓.rb
应用程序/中间件/base_site.rb
ruby-on-rails - Rails - 会话变量不通过 Apartment Switch 持续存在
我有一个情况。
我正在使用Apartment gem构建多租户时间输入解决方案。这是流程。我被困住了。
1) 用户到达创建租户的注册页面。这是控制器:
和观点:
如您所见,这被设置为重定向到new_user_url
助手传递一个等于新 org_identifier(刚刚创建的租户)的子域。
2) 提交正确的信息后,重定向发生在租户创建后。我已经确认创作正在发生。我已经确认重定向是正确的。然后会话变量清空自己。
用户控制器:
用户/新视图:
当我提交后续表单时 - 其中包括一个隐藏字段,其中电子邮件参数作为我想要的会话值 - 我得到“电子邮件无效”。
我浏览了 Apartment gem 文档并搜索了网络。我看不出这应该失败的任何原因。但当然,我确信它就在我面前。任何帮助,将不胜感激。
更新:
我找到了我将尝试的解决方案,将 cookie 存储的域设置为 all,然后在应用程序控制器内部进行检查。我没有使用设计,但我们会看看它是否有效。
ruby-on-rails - I18n 未使用公寓宝石导轨加载翻译
我正在使用公寓 gem制作一个多租户应用程序。我已经全部设置好了,一切都按预期工作。我还使用带有活动记录后端的 Rails Internationalization (I18n) 来存储翻译。我目前的设置
翻译表
Apartment.rb 配置
我已将翻译模型添加到排除模型列表中,因此它在所有租户中都是全局的
在我的翻译表中,我有英语(默认)和挪威语的翻译。在主域上,一切都按预期在英语和挪威语之间切换,但是一旦我加载租户,所有翻译都会丢失。控制台演示:
我不确定为什么在租户环境中缺少翻译。我想将 Translation 模型放在excluded_models 列表中应该可以解决问题,但似乎某处有问题。有什么线索吗?谢谢
ruby-on-rails - 在 Rails 迁移中创建约束
我有一个创建命名约束的迁移
但是在 中schema.rb
,rails 把这部分变成了一个索引
问题是我们正在使用Apartment
并且新创建的租户有一个索引而不是约束,我们正在使用 postgreSQL 功能ON CONFLICT ON CONSTRAINT
目前的解决方案是回滚一些迁移并再次迁移,但这是一个非常肮脏的黑客
如何停止创建此索引的rails?
ruby-on-rails - 将 pg_search 与公寓 gem 一起使用
我正在尝试将 pg_search gem 与公寓 gem 启用的多租户应用程序结合使用。Apartment 将我的数据与每个租户的模式分开。使用 pg_search 默认设置搜索每个租户都可以很好地工作,但是在启用 pg_trgm 的情况下使用它时遇到问题。
我通过添加一个名为“共享扩展”的单独模式并在其上启用 pg_trgm 扩展,在我的数据库上启用了 pg_trgm 扩展。通过配置公寓,此模式始终包含在搜索路径中:
但是当我尝试对模型进行三元组搜索时,我得到了一个错误。
这让我觉得 pg_trgm 没有正确启用,但是我可以在我的数据库上执行以下查询就好了:
任何帮助,将不胜感激!谢谢
ruby-on-rails - 在公寓宝石中复制租户
我正在使用带有 PostgreSQL 的公寓 gem,我需要使用数据制作现有租户的副本。我能想到的一种方法是从租户那里收集所有数据,然后切换租户并开始创建记录。下面是一个小演示。模型是要复制的模型列表。
任何帮助将不胜感激。
ruby-on-rails - Rails:使用 Devise 和 Apartment gem 的多租户
我正在使用devise
和apartment
gems 创建一个多租户应用程序。我正在使用 postgresql 数据库。我已经创建了几个模型。“用户”模型位于全局命名空间中,用于设计 gem 的身份验证。租户命名空间中还有一些其他模型(例如项目、设置等)。
我已按照本教程创建此多租户应用程序:https ://gorails.com/episodes/multitenancy-with-apartment?autoplay=1
从某种意义上说,如果我从他们的相关帐户(例如 user1@gmail.com 和 user2@gmail.com)登录到两个单独的子域(例如 user1.example.com 和 user2.example.com),多租户功能运行良好) 它工作正常,我可以为每个租户创建唯一的记录。
现在,问题是,我可以使用任何电子邮件登录到任何子域,并且租户记录将根据地址栏中存在的子域显示。user1@gmail.com
例如,我可以使用at登录,user2.example.com
它会成功验证并显示user2
租户记录。
我的问题是,在登录时如何检查当前用户的子域是否与请求的子域匹配(在地址栏上),如果匹配,则继续进行身份验证并显示管理仪表板,如果不匹配(从错误的子域或 TLD 登录)进行身份验证用户,但将他重定向到其相关子域的仪表板。我怎样才能做到这一点?
更新#1:
通过使用次要设计配置,我能够将用户登录限制到其特定的子域。在devise.rb
文件中,我:subdomain
在身份验证密钥列表中添加了属性,因此它还会检查正确的子域值以及电子邮件,但是我不确定如何正确地将子域值提供给登录表单。我可以在登录表单中使用这样的隐藏字段,<%= f.hidden_field :subdomain, value: request.subdomain %>
但它是可破解的,因为用户可以从浏览器检查器更改它的值。
更新#2:
我能够应用一种万无一失的方法来限制用户登录到他们的特定子域。我遵循了这种方法:https ://github.com/plataformatec/devise/wiki/How-to:-Scope-login-to-subdomain
现在,我唯一的问题是用户无法从 TLD(例如 example.com)登录,我希望它成为可能,但登录后用户必须通过活动会话重定向到他们的相关子域。