问题标签 [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.

0 投票
0 回答
163 浏览

ruby-on-rails - Rails 多租户应用程序

我正在创建一个类似于项目管理软件的多租户应用程序。

在我的结构中,有一个从多租户中排除的用户表。

用户来到我的注册页面,填写名为 Company 的子域字段,然后我为该用户创建一个模式。因此,他们可以使用companyname.example.com访问他们的帐户。到目前为止一切都很好。

我还有一个Account表来存储创建者用户的子域。

现在,我还为帐户权限创建了一个表。此表包括 Account_id 和 user_id。我这样做是因为,用户可以使用相同的电子邮件地址加入多个公司。

结论;

  • 用户表
  • 账户表
  • Account_permissions(检查某人何时尝试登录特定公司。因为他们拥有不止一家公司。)

这有意义吗?你对这种情况有什么想法吗?

0 投票
3 回答
3338 浏览

ruby-on-rails - Rails Postgres 架构问题 - 以下架构之一无效:“test”“public”

我已经到处搜索了这个问题的答案,但我做不到。

我正在尝试使用基于 Postgres 模式的 Rails 4、Devise 和 Apartment 构建多租户应用程序。对于我本地的 Postgres 服务器,我决定使用 PostgresApp。我遵循了Go Rails 多租户指南,并且当此错误开始出现时,我的设置(每个租户一个用户)正常工作。昨天,当我尝试为 Devise 安装 Invitable 扩展时,这开始在本地显示,我似乎找不到任何关于发生了什么的线索。

这是我得到具体错误的方法:

在本地访问该站点时,这会导致 Rails 抛出:

公寓::TenantNotFound

以下架构之一无效:“www”“public”

这是我的 apartment.rb 初始化程序:

这是我的用户迁移文件:

我还通过命令行进入了本地 Postrgres 数据库。下降工作,创建数据库工作。如果需要,我可以提供这些。我目前的猜测是告诉我 Rails 与 PostgresApp 对话的方式或我进行迁移的方式有问题。但也许有更多经验的人可以指出我错过的东西。

所以我的问题是我在做什么来导致这种情况?我该如何解决?我怎样才能更多地了解问题所在?

0 投票
0 回答
57 浏览

heroku - 不寻常的数据库情况 - 必须从 Heroku 模式逐个模式执行 pg_dump,有什么快速的方法可以做到这一点?

我们的 Rails 应用程序使用 Apartment gem 存储客户端数据,它为每个租户创建一个模式。我们在 Heroku 上使用 Postgres 9.4。

一切正常,直到我们达到大约 600 个租户,突然我们的自动 pg 备份停止工作。Heroku 支持通知我们,他们无法执行备份,因为给定模式数量(大约 30,000 个)的表总数导致 pg_dump 遇到 OOM 错误。(我们尝试直接对本地机器执行 pg_dump 也失败了。)

Heroku 建议我们可以通过逐个模式备份我们的数据,例如,在 bash 脚本中循环遍历每个模式名称:

这可行,但根据我们的计算,仅下载我们所有的数据就需要 40 多个小时(假设一切正常)。这有点令人沮丧,因为实际的数据量是花生(大约 4GB 未压缩)。

我们想考虑将我们的数据库导出到 Amazon RDS,但我们公司认为我们的客户不会容忍应用程序宕机两天(假设一切正常)。我们正在成长,潜在的迁移停机时间只会变得更糟,有效地将我们锁定在 Heroku 中。

问题:

  1. 有什么方法可以加快这个过程吗?(FWIW,做一个未压缩的 pg_dump 似乎并没有提高性能。)

  2. 这只是标准的数据库迁移停机时间,开发人员只需要告诉公司他们必须处理停机时间吗?

0 投票
1 回答
1123 浏览

ruby-on-rails - rake assets:预编译没有数据库连接和动态路由

我正在尝试编译我的资产以进行生产,这不是在本地完成的。

我有两个限制:

  • 我无法连接到数据库(对于这一步)
  • 我有一个动态路由,通常需要从数据库获取信息(但资产编译不需要)

基本上,我在生产环境之外构建的 docker 映像上运行。我无法连接数据库。我通过在 dockerfile 中直接传递带有 env_var 的虚假数据库地址来使用技巧。

但现在我有一条动态路线:

这是有效的,因为我在添加新租户名称时重新加载了路由。

但是当我必须编译资产时它失败了,因为编译初始化了应用程序和路由尝试这样做Apartment.tenant_names.join('|'),这显然会在没有数据库连接的情况下失败。

如果我用Apartment.tenant_names.join('|')字符串替换,则不会调用 db 并且编译运行良好。

有什么我可以用来查看编译步骤是否正在尝试初始化应用程序并设置条件来执行以下操作:

任何想法 ?

编辑:解决方法

这不是问题的解决方案,但这里有一个解决方法供将来参考。显然使用 lambda 不会触发编译错误:

0 投票
2 回答
371 浏览

ruby-on-rails - Rails 4 Heroku 多租户应用程序重定向到 heroku 主页

好的,所以我真的迷路了,甚至不太确定在这里发布什么信息。

我是多租户的新手,我遵循了有关使用公寓 gem 的教程。一切都在 lvh.me:3000 上完美运行,但是当我将应用程序推送到 Heroku 时,它会很好地推送没有错误,但是当我尝试转到我的域 pv-development@herokuapp.com 时,它会将我重定向到 heroku 主页页???

请在这里帮忙..让我知道我需要在这里发布什么以获得可能的解决方案..我什至不知道这可能源于哪里!

提前感谢您的患者!

编辑#1

这是我的日志刚刚从heroku给我的:

0 投票
0 回答
281 浏览

ruby-on-rails - 设备登录失败后,公寓 current_tenant 重置为“公共”

我使用 Devise 进行身份验证,使用 Apartment 来支持 SAAS 应用程序的多租户。

登录失败后,设计“重定向”到登录页面(Users::SessionsController#new),并且Apartment::Tenant.current之前在TenantElevator中间件中设置的值返回到其默认值“public”。

发生这种情况是因为 Devise 实际上并没有重定向到登录页面,而是使用新的机架环境调用 FailureApp(呈现登录页面)并返回其响应。新的机架应用程序没有TenantElevator中间件,因此租户未在机架应用程序中设置。

有谁知道如何解决这个问题?也许我可以将 TenantElevator 中间件添加到 Failure 应用程序?

0 投票
1 回答
25 浏览

ruby-on-rails - 不确定如何在用户上使用计划验证器来检查计划是否处于允许的最大用户 Rails 4 Devise Invitable

我使用 Apartment Gem 在 Rails 4 中构建了一个多租户应用程序,这是一个基于订阅的应用程序,并通过计划类型限制用户数量。

我的计划模型中有以下验证(我将在此处粘贴整个内容),但我不确定如何验证此验证,以便管理员或所有者在帐户处于最大容量时无法邀请用户?

计划.rb:

功能方面我想确保如果关联帐户的用户数量超过 plan_type 允许的数量,则所有者无法添加用户。如果是这样,我想闪烁一条消息说请升级..

提前谢谢..这是我存在的祸根!!

0 投票
1 回答
733 浏览

ruby-on-rails - PG::UndefinedTable: 错误: 多租户 Rails 应用程序不存在关系

我正在与另一位开发人员一起开发多租户 Ruby on Rails 应用程序。我拉了他的分支并收到了新的迁移文件。我跑了 rake db:migrate。我访问了那个控制器的索引,我得到了未定义的错误。

经过一些研究,我了解到我在创建租户后运行了迁移。(参考:PG::UndefinedTable: ERROR: relationship "..." doesn't exist)而且我也知道 rake db:reset 在开发中解决了这个问题。但是进行重置会清除我在开发中很好的数据。

我担心的是,这在生产中如何工作?当我发布到生产环境时……这是否意味着对于现有租户我无法运行迁移和发布新功能?

有一个永久的解决方案吗?

0 投票
0 回答
259 浏览

ruby-on-rails - 从管理员帐户管理租户帐户的结构

我正在尝试使用 Rails 5 为多租户 Web 应用程序创建一个 API。

但是我很难找出一个允许我们这样做的应用程序结构:

  • 我们不想让用户自己注册以获取他们组织的帐户,而是让我们员工的人在内部创建它们。

  • 工作人员应向每个组织的平台管理员发送邀请,使他们能够完成注册过程,允许他们邀请自己的用户加入。注册的邀请 url 将已经是子域,并在他们自己的数据库模式 (postgres) 中创建记录

  • 从组织的管理员开始,角色层次结构限制对不同资源和操作的访问。

我不愿意为同一用户模型的一个用户提供类似超级管理员的角色来完成该任务。

我是否需要为每种类型的用户创建两个不同的模型,在公共架构上留下一个(“系统管理员”),以旋转一个单独的管理界面?

这对我来说似乎有点奇怪,但也许是对的。(具有两个不同的模型,具有相同的目的,即持久化、识别和管理平台的用户凭据)

此外,我不想在没有充分理由的情况下将用户帐户留在公共架构中,并且一个用户属于多个组织的情况不太可能在应用程序的上下文中发生。(最好是单独的帐户)

...所以我的问题是:

什么是允许员工在内部管理租赁账户的创建的适当/良好的应用程序结构?

0 投票
1 回答
357 浏览

ruby-on-rails - 在公寓租户 Rails 4 之外添加静态子域

我在尝试添加静态子域的同时还运行公寓 gem 时遇到问题。

基本上我想做类似的事情:

但是,当我将此代码放在我的路由文件中并尝试转到 docs.mysite.co 时,我收到以下错误:

我的整个路线文件如下:

非常感谢这里的任何帮助!如果我需要添加更多信息,请告诉我!

编辑#1添加Application.rb