领域
首先,您需要确保您将自己的自定义域用于子域。
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_variable
for the Account
or something,但现在还没有做这件事。
这对于 MYSQL 驱动的数据库非常有效,但也意味着您必须为每个帐户创建数据库,这不适用于 PGSQL(据我所知)
PGSQL 模式
我觉得这是一种欺骗方式,因为所有数据仍存储在 1 个数据库中 - 它基本上只是针对不同类型的数据。
这里的问题是,真正的多租户应该是您完全分离用户数据的地方,因此如果他们愿意,您可以将其完全从应用程序中删除。从安全和访问的角度来看,它是最灵活和模块化的方式。
Heroku 的问题是他们只能使用一个数据库(他们让每个人都可以访问他们的 AWS 数据库实例),这意味着他们不能允许您创建 50 多个免费数据库(它不会很好地工作)。
当然,您可以使用自己的堆栈来创建所需的数据库,但就 PGSQL 而言,它只是schemas
为您的数据创建然后使用类似的东西 -Apartment
来实现它:
创建新租户时,PostgreSQL 的工作方式与其他数据库略有不同。如果您使用的是 PostgreSQL,Apartment 默认会设置一个新模式并迁移到那里。这提供了更好的性能,并允许 Apartment 在 Heroku 等系统上工作,而 Heroku 不允许创建全新的数据库。