質問: ロードバランサで複数のWEBサーバに処理を分散していて、WEBサーバは一つのDBサーバを参照しているrailsアプリがあります。 運用している中で、テーブルのカラムを削除する必要がある場合、マイグレーションファイルでremove_columnをすると思うのですが、 capistranoで全てのWEBサーバにデプロイする中で、デプロイ対象のWEBサーバが多いとWEBサーバでは削除したカラムを参照しますが、 DB側はrake db:migrateが実行されたためにカラムが削除されているという状況が発生するような気がしています。 このような事象が発生しないように複数サーバへのデプロイを行うにはどうすればよいでしょうか?
回答: すぐには消さない、という戦略が考えられます。 リリースを2回に分け、 1回めのリリースで、すべてのアプリケーションサーバを、そのカラムにアクセスしない版に更新します。 次のリリースで、要らなくなったカラムをDBから実際に消す、という寸法です。 カラム名の変更についても、基本的には同じ考え方が適用できるかと思います。 # いっぺんにやってひどい目にあったことが何度か ( ́・ω・`)