2

我计划在我即将推出的应用程序中使用 Devise 和 Apartment 为每个创建帐户的组织创建子域。我想在 Heroku 上托管我的应用程序,但遇到了以下引用:

在数据库中使用多个模式的最常见用例是构建软件即服务应用程序,其中每个客户都有自己的模式。虽然这种技术看起来很有吸引力,但我们强烈建议不要使用它,因为它会导致许多操作问题的案例。例如,即使是中等数量的模式(> 50)也会严重影响 Heroku 的数据库快照工具 PG Backups 的性能。

什么技术可以很好地与 Heroku 一起在 rails 4 中托管 basecamp 风格的子域,许多用户可以登录到他们所属的子域?

如果 Heroku 不起作用,还有哪些其他 PaaS 选项可以很好地做到这一点?

4

1 回答 1

4

领域

首先,您需要确保您将自己的自定义域用于子域。

Heroku 的标准xxx.herokuapp.com将无法在此之上处理另一个子域 - 因此您基本上需要从一开始就使用您的自定义域

最好参考此文档以获取更多信息!


多租户

虽然我没有使用 PGSQL 的经验schemas,但我确实有一些整体上的多租户。

这里有很多很棒的资源:

从本质上讲,multi-tenancy这只是一种确定数据范围的方法,以便您只能看到/与之交互的租户。在数据库的意义上,实现此目的的两种方法是使用不同的数据库(就像使用 MYSQL 一样),或者使用模式(如使用 PGSQL)

虽然我无法直接解决您的问题,但我可以为您提供一些想法:


楷模

实现多租户的一种方法,尤其是使用 MYSQL 之类的,是通过模型来实现的:

我如何在具有活动记录的 Rails 中使用两个不同的数据库?

#lib/admin.rb
class Admin < ActiveRecord::Base
  self.abstract_class = true 
  establish_connection "#{Rails.env}_admin"
end

#app/models/option.rb
Class Option < Admin
  # do stuff
end

这对我们来说非常有效,尽管我们还没有让它适用于范围帐户。我们一直在考虑设置一个@@class_variablefor the Accountor something,但现在还没有做这件事。

这对于 MYSQL 驱动的数据库非常有效,但也意味着您必须为每个帐户创建数据库,这不适用于 PGSQL(据我所知)


PGSQL 模式

我觉得这是一种欺骗方式,因为所有数据仍存储在 1 个数据库中 - 它基本上只是针对不同类型的数据。

这里的问题是,真正的多租户应该是您完全分离用户数据的地方,因此如果他们愿意,您可以将其完全从应用程序中删除。从安全和访问的角度来看,它是最灵活和模块化的方式。

Heroku 的问题是他们只能使用一个数据库(他们让每个人都可以访问他们的 AWS 数据库实例),这意味着他们不能允许您创建 50 多个免费数据库(它不会很好地工作)。

当然,您可以使用自己的堆栈来创建所需的数据库,但就 PGSQL 而言,它只是schemas为您的数据创建然后使用类似的东西 -Apartment来实现它:

创建新租户时,PostgreSQL 的工作方式与其他数据库略有不同。如果您使用的是 PostgreSQL,Apartment 默认会设置一个新模式并迁移到那里。这提供了更好的性能,并允许 Apartment 在 Heroku 等系统上工作,而 Heroku 不允许创建全新的数据库。

于 2014-07-13T08:35:47.377 回答