2017-12-08 5 views
1

負荷と時間ベースのスケーリングで実行されているOpsWorks Railsアプリケーションがあるとします。水平スケーリングされたアプリケーションでのレールの移行戦略

複数のアプリケーションサーバーが稼動していて、アプリケーションサーバー間で複数のrake db:migrateが実行されているコードを展開するとどうなりますか?

Railsにはこれに対するガードがありますか?または、特に、移行の実行を担当する単一のサーバーを指定する必要がありますか?

AWSのRails + RDS(Postgresql)の移行戦略についても知りたいです。

答えて

0

答えがはい、Railsはこのような状況

まず警戒していた、RDS自体があなたのクエリをキャッシュすることができます。たとえば、2つのインスタンスが同時に1つのCREATE INDEXクエリを実行している場合、RDS自体で処理できます。

第2に、Railsは自動的にschema_migrationsという名前のテーブルを作成します。インスタンスdb:migrateを実行している場合、テーブルschema_migrationsは、データベースがすでにバージョン管理システムのように移行されていることを他のインスタンスに知らせるのに役立ちます。

しかし、あなたはいくつかのカスタムクエリをdb/migrate/***.rbファイルの場合、RDSではクエリが正しく処理されないことがあります。

カスタムドメインでデータを更新する必要がある場合は、レーキタスクを作成して手動で実行する必要があります。

したがって、db:migrateを使用してデータ構造を更新すると、何百ものインスタンスがあってもすべてがすでに処理されています。

詳細については、Rails's document

を参照してください。
関連する問題