横向扩展应用程序的Rails迁移策略

时间:2017-12-08 04:11:30

标签: ruby-on-rails aws-opsworks

假设我有一个运行基于加载和时间的扩展的OpsWorks Rails应用程序。

如果我在运行多个应用程序服务器的情况下部署代码,在应用程序服务器上执行多个rake db:migrate,会发生什么?

Rails有没有防范这个?或者我是否需要指定一个负责运行迁移的服务器?

我也很想知道AWS上Rails + RDS(Postgresql)的迁移策略。

1 个答案:

答案 0 :(得分:1)

答案是是的,Rails防范了这种情况

首先,RDS本身可以缓存您的查询。例如,您的两个实例同时运行一个CREATE INDEX查询,RDS本身就可以处理它。

其次,Rails自动创建一个名为schema_migrations的表。当您的某个实例运行db:migrate时,表schema_migrations可以帮助其他实例知道数据库已经迁移(就像版本管理系统一样)

但是,在db/migrate/***.rb文件中编写了一些自定义查询有一种不好的做法,那么RDS可能无法正确处理您的查询。

如果您必须执行自定义域更新数据之类的操作,则应编写rake任务并手动执行。

因此,如果您只使用db:migrate来更新数据结构,那么已经为您处理了所有内容,即使您有数百个实例。

有关详细信息,请参阅Rails's document