Railsで運用していた本番環境を、マイグレーションの加減で止めてしまいました。
経緯
AWS上にRailsで作ったプロジェクトがありまして、環境管理をElastic Beanstalkで行っていました。毎週1回、人の少ないタイミングに更新を行っていたのですが、あるときに反映したところで、マイグレーションが全く進まなくなってしまいました。
原因
もちろん、開発環境で同じマイグレーションは回していたので、マイグレーションの記載ミスではなかったのですが、本番環境にアクセスがあった中でマイグレーションを動かしてしまったこと、そして作成するマイグレーションが新しいテーブルを作るようなものではなく、既存のテーブルの定義を書き換えるものだったがために、ロックが絡み合って一向に進まなくなってしまったのでした。
その場での対応
ひとまず、強引にデータベースサーバを再起動して元の状態に戻して、古いバージョンのコードを上書きして、旧バージョンの動作に戻しました。そして、アプリをメンテモードに入れて、接続を切った上でマイグレーションを回したところ、すんなり実行できるようになりました。
教訓
マイグレーションとして自動化したところで、データベース操作には相応のコストや注意点がある。