在Heroku上托管时,如何拥有多个模式和多个子域?

时间:2014-07-12 22:39:48

标签: ruby-on-rails heroku devise apartment-gem

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

  

在数据库中使用多个模式的最常见用例是   构建每个客户都有的软件即服务应用程序   他们自己的架构。虽然这种技术看起来很引人注目,   建议反对它,因为它已导致许多操作案例   问题。例如,即使是中等数量的模式(> 50)也可以   严重影响Heroku的数据库快照工具的性能,   PG备份。

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

如果Heroku不起作用,还有哪些其他PaaS选项能做得好吗?

1 个答案:

答案 0 :(得分:4)

<强>域

首先,您需要确保自己使用自己的自定义域作为子域。

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

reference this documentation获取更多信息会很好!


Multi Tenancy

虽然我没有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,它不允许创建一个全新的数据库。