我计划在即将发布的应用程序中使用Devise和Apartment为每个创建帐户的组织创建子域。我想在Heroku上托管我的应用程序,但是遇到了以下引用:
在数据库中使用多个模式的最常见用例是 构建每个客户都有的软件即服务应用程序 他们自己的架构。虽然这种技术看起来很引人注目, 建议反对它,因为它已导致许多操作案例 问题。例如,即使是中等数量的模式(> 50)也可以 严重影响Heroku的数据库快照工具的性能, PG备份。
哪些技术可以很好地与Heroku一起在rails 4中托管basecamp风格的子域名,其中许多用户可以登录到他们所属的子域名?
如果Heroku不起作用,还有哪些其他PaaS选项能做得好吗?
答案 0 :(得分:4)
<强>域强>
首先,您需要确保自己使用自己的自定义域作为子域。
Heroku的标准xxx.herokuapp.com
无法在此基础上处理另一个子域名 - 因此您基本上需要来使用您的自定义域名从一开始
reference this documentation获取更多信息会很好!
虽然我没有PGSQL schemas
的经验,但我做整体上有多租户。
这里有很多很棒的资源:
基本上,multi-tenancy
只是范围数据的一种方式,因此它只 您看到的租户与。。。相互作用。就DB而言,实现这一目标的两种方法是使用不同的数据库(就像使用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
这对我们来说非常有效,尽管我们还没有为scoped帐户工作。我们一直在考虑为@@class_variable
设置一个Account
,但是现在还没有开始工作。
这对于MYSQL驱动的数据库非常有效,但也意味着您必须为每个帐户创建数据库,这对于PGSQL不起作用(据我所知)
PGSQL架构
我认为这是一种欺骗方式,因为所有数据仍然存储在1个数据库中 - 它基本上只是范围围绕不同类型的数据。
这里的问题是真正的多租户应该是您完全分离用户数据的地方,因此如果他们需要,您可以完全将其从应用程序中删除。来自安全与安保访问视角,它是最灵活的&amp;模块化的方式。
Heroku的问题是他们只能使用一个数据库(它们可以让所有人访问他们的AWS数据库实例),这意味着他们无法创建50多个免费数据库(它只是赢得了工作)非常好。)
当然,您可以使用自己的堆栈来创建所需的数据库,但就PGSQL而言,它只是为您的数据创建schemas
。然后使用类似 - Apartment
之类的东西来实现它:
PostgreSQL与其他数据库的工作方式略有不同 创造一个新的租户。如果你正在使用PostgreSQL,Apartment by default将设置新架构并迁移到那里。这提供了 更好的性能,并允许公寓在像这样的系统上工作 Heroku,它不允许创建一个全新的数据库。