域
首先,您需要确保为子域使用自己的自定义域。
Heroku 的标准 xxx.herokuapp.com 将无法在此之上处理另一个子域 - 所以您基本上需要从一开始就使用您的自定义域
如需更多信息,请联系reference this documentation!
Multi Tenancy
虽然我没有使用 PGSQL 的 schemas 的经验,但我确实有一些整体上的多租户。
这里有很多很棒的资源:
本质上,multi-tenancy 只是一种范围数据的方式,以便它仅您看到/与之交互的租户。在数据库的意义上,实现这一点的两种方法是使用不同的数据库(就像使用 MYSQL 一样),或者使用模式(比如使用 PGSQL)
虽然我无法直接解决您的问题,但我可以为您提供一些想法:
模型
实现多租户的一种方法,尤其是使用 MYSQL 之类的,是通过模型来实现的:
How do i work with two different databases in rails with active records?
#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
这对我们来说非常有效,尽管我们还没有让它适用于范围帐户。我们一直在考虑为Account 设置一个@@class_variable 或其他东西,但目前还没有进行。
这对于 MYSQL 驱动的数据库非常有效,但也意味着您必须为每个帐户创建数据库,这不适用于 PGSQL(据我所知)
PGSQL 模式
我觉得这是一种欺骗方式,因为所有数据仍存储在 1 个数据库中 - 它基本上只是范围围绕不同类型的数据。
这里的问题是,真正的多租户应该是您完全分离用户数据的地方,因此如果他们愿意,您可以将其完全从应用程序中删除。从安全和访问的角度来看,它是最灵活和模块化的方式。
Heroku 的问题是他们只能使用一个数据库(他们让每个人都可以访问他们的 AWS 数据库实例),这意味着他们不能允许您创建 50 多个免费数据库(它不会很好地工作)。
当然,您可以使用自己的堆栈来创建所需的数据库,但就 PGSQL 而言,它只是为您的数据创建 schemas,然后使用类似 -Apartment 的东西来实现它:
PostgreSQL 在以下情况下的工作方式与其他数据库略有不同
创建新租户。如果你使用的是 PostgreSQL,Apartment by
默认将设置一个新架构并迁移到那里。这提供了
更好的性能,并允许 Apartment 在系统上工作,例如
Heroku,不允许创建全新的数据库。