问题标签 [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 - 范围关联和公寓宝石
我希望我能正确解释这一点。
我有以下内容:
这些都是在公租客公寓里的宝石。公司是承租人。这里的想法是用户通过注册与公司相关联。我在 Enrollments 中有其他信息,所以我没有选择 STI。
我可以调用 current_user.enrollments 等,但我真正想要的是一个 has_one 类型的关联,您可以在其中从当前租户那里获得注册。
我添加了这个:
调用时有效,但您无法使用 Ransack 等进行搜索
对于 Ransack,类似的查询enrollments_somefield_eq=somevalue
可以正常工作,但它会搜索所有注册,但我只想要当前公司的注册。我已经看到您可以在哪里向关联添加条件,但我认为我无法在模型中获取租户 ID 来使用它。
这里有什么想法吗?
更新
我在这里很近 - 经过大量的谷歌搜索后,我拼凑了这个:
我真的很想:
但这不起作用。因为每个公司和用户实际上只有一个注册。这可能足够接近,因为我可以active_enrollments
通过 ransack 查询并应用范围等。
ruby-on-rails - 多租户 Rails 应用程序到 heroko 部署
我使用 Apartment gem 开发了一个 Rails 多租户应用程序,该应用程序在本地运行良好,我可以使用 lvh.me:3000/ 对其进行测试,但是无法将其部署到 heroku。但是,heroku push 在终端上完成了正常的部署过程。基本上,我需要的是;而不是访问 myapp.herokapp.com,我希望能够访问 subdomain.myapp.herokuapp.com。目前,当我尝试访问我的应用程序 url 时,它被重定向到 herko 登陆/主页,即可能应用程序未配置为 subdomain.myapp.herokuapp.com 主机名。
两年多前提出的类似问题:Subdomain with Rails and herokuapp
ruby-on-rails-4 - 公寓宝石:如何重命名租户?
我们能否在apartment-gem中重命名租户,或者我们必须删除租户并创建一个新租户来实现这一点。
请给我一些建议
ruby-on-rails - rails Apartment gem 在通用电梯上遇到问题
我刚开始使用公寓,我想开发一种可以根据共享秘密工作的电梯。然而,我最初的测试并不乐观。
我现在所处的位置是:
和:
所以本质上,每次请求进入数据库时,都会使用 my_schema_name 作为模式。在我的控制器中,我有:
我的测试是:
当我运行测试时,我得到:
这对我说架构没有运行。我对么?如果是这样,我做错了什么?
ruby-on-rails - 活跃管理员和公寓宝石
我是 Active Admin 的新手,但从我目前看到的情况来看,我认为这很容易实现。
我有一个带有公寓 gem 的应用程序来添加多租户。
我正在向我的应用程序添加活动管理员。Apartment 使用 PostgreSQL 模式来隔离数据。因此,例如,默认情况下,您在 Apartment 中的模型有一个“公共”租户,除非您调用类似Apartment::Tenant.switch!('abc')
.
在我的应用程序中,我User
和Company
模型在公共租户中,其他一切都在租户中。所以开箱即用的 Active Admin 工作正常,除了租户模型不显示任何记录 - 正如他们应该的那样。
我做了一些修改并手动添加了Apartment::Tenant.switch!('abc')
一个 AA 模型文件,效果很好。这是一个理想的解决方案:
- 当
AdminUser
租户中的日志设置为默认值时(比如第一个租户) - 在每个租户模型上,可能有一个选择菜单提交参数 (?tenant=abc),然后租户被更改
- 活动租户可能保存在
AdminUser
会话存储中,因此您可以在相同的租户数据中工作,直到您需要切换。
我想我自己可以很容易地做到这一点,但我想看看是否有任何我需要解决的 Active Admin 特定问题,例如:
- AA 是否具有等效的应用程序控制器?将租户切换逻辑与主要逻辑保持在其中会很好。
- 备用 AA 设计
AdminUser
有一个单独的会话变量存储可用,对吗?
任何建议将不胜感激 - 一旦我整理出来,我会将我的最终解决方案/代码发布回这篇文章。
ruby-on-rails - 如何测试 Apartment、Minitest、Capybara 和 Selenium
我是 Minitest 和 Apartment 的新手,很难正确配置环境以运行测试用例。我想使用 Capybara 和 Selenium 进行验收测试。当我运行测试时,我收到以下错误消息:
所以似乎租户没有正确创建。Apartment gem 有关于如何将它与 Rspec 一起使用的说明,但我不知道如何在 Minitest 中进行类似的设置。应该如何定义租户以便 Minitest 可以看到它们?
我的 test_helpers.rb:
和测试用例:
ruby-on-rails - 在 ActiveRecord + Postgres 中永久禁用 pg_stat_statements
我使用 Rails 4 中的 Apartment gem 来管理我的 Rails 应用程序中的多租户。
正如这个问题所解释的,尝试执行的 PG Stat Statments 需要超级用户权限,而 Heroku 不允许这样做。所以我按照指示禁用 pg_stat_statements
.
但是,下次我创建迁移时,我注意到这一行被重新添加到db/schema.rb
文件中。
如何配置活动记录以不再重新添加该enable..
行?我想要那个永久禁用。
谢谢!
ruby-on-rails - RSpec around() 块的行为不同于 before() + after()
我正在使用公寓 gem来管理多租户 Rails 应用程序。
旁注:如果您不熟悉 gem,切换公寓只是切换 Postgres DB 后端使用的模式。你改变公寓租户Apartment::Tenant.switch!(apartment)
我有几个测试在某个公寓租户的背景下测试行为。为此,我使用以下设置(为控制器规格显示的示例)
如您所见,有两种设置测试的方法。一个使用around()
钩子,另一个做同样的事情,但独立使用before()
andafter()
钩子。
我想这两种方法是等效的并且可以互换的。但令人惊讶的是,只有选项 2 真正有效。
这种行为有原因吗?块是否以与around()
块不同的顺序运行before()
?
ruby-on-rails - 在 Active Admin 中切换公寓租户
这是我之前帖子的扩展:
我以为我有这个工作,但我被困住了。我Company
在公共模式中有一个模型作为租户模型和Locations
单个租户。这是我的活动管理员location.rb
文件:
skip_authorization skip_policy_scope 来自我在 AA 中仍然存在的一些 Pundit 问题。如您所见,我尝试Apartment::Tenant.switch
在几个地方添加。在控制器块内部是我可以让它工作的唯一地方。
当我加载Locations
索引页面时,它工作正常,我看到了我的租户位置。问题是,如果我返回仪表板或其他页面并返回位置并调用,Apartment::Tenant.switch
我会被踢回 AA 登录屏幕并且无法重新登录。我必须手动输入 AA 注销路径才能强制注销。
这很奇怪,不知道还有什么办法解决这个问题。日志没有显示太多。
我打算在这里添加一些逻辑,使用菜单下拉菜单设置会话变量等,然后Apartment::Tenant.switch
在需要时调用资源页面,但到目前为止这是一个显示停止器。不知道是 Devise、Pundit、Apartment、Active Admin 还是组合。
更新
一些进展 - 尝试添加开关的输出!调用记录器调试并“解决”了问题。如果我将 switch 调用设置为变量,它也会消失:
更新 2
我之前的更新是错误的 - 问题仍然存在。我已将其范围缩小到设计。第二个switch!
电话永远不会被调用,因为 Devise 会引发 401 错误并首先将您踢出。我禁用了 Devise for Active Admin,我的切换系统工作正常。我可以使用简单的公司下拉菜单和会话来即时切换租户。设计不知何故根本不喜欢这样。
这是我的 AA 文件的要点:https ://gist.github.com/jasper502/8fd16c31ee26667c5a16
postgresql - 如何管理从 sidekiq 到 PostgreSQL 的连接池?
问题我有一个运行几百个sidekiq 后台进程的rails 应用程序。它们都连接到一个 PostgreSQL 数据库,该数据库对提供 250 个连接并不十分满意——它可以,但如果所有 sidekiq 进程不小心将查询发送到数据库,它就会崩溃。
选项 1我一直在考虑在数据库前面添加 pgBouncer,但是我目前不能使用它的事务模式,因为我高度依赖在search_path
每个作业处理开始时设置 来确定哪个“国家”(PostgreSQL 模式)工作(公寓宝石)。在这种情况下,我将不得不使用基于会话的连接池模式。然而,据我所知,这将要求我在每次作业处理后断开连接,将连接释放回池中,这将是非常昂贵的性能,不是吗?我错过了什么吗?
选项 2使用基于应用程序层的连接池当然也是一个选项,但是我不确定如何使用 sidekiq 为 PostgreSQL 做到这一点?
选项3我没有想到的东西?