🔖
CircleCIのRails MigrationでToo long with no outputが発生した時の対処法
発生したエラー
CircleCIでRailsのmigrationジョブ実行中に以下のエラーが発生。
Too long with no output (exceeded 10m0s): context deadline exceeded
CircleCIでは一定時間出力が無いとコマンドが強制終了されます。デフォルトでは10分に設定されています。
今回migrationをレコード数が大きいテーブルに対してカラム追加を実行したため、10分を超えてしまいタイムアウトが発生してしまいました。
対処法
no_output_timeout
を設定する。
- run:
name: Migration
no_output_timeout: 30m
途中でRailsのmigrationが終了してしまった場合
CircleCIが途中でタイムアウトした場合もDBに対してはALTER TABLE
がそのまま実行されているケースもあります。
レコード数が大きいテーブルの場合は少し待つと、カラムの追加が反映されているはずです。
しかしmigrationが正常には完了していないため、schema_migrations
に追加されていません。このままでは次回のmigration実行時に再度該当のmigrationが実行されてしまいエラーになってしまいます。
対処法
schema_migrations
に対して手動で該当のmigrationのレコードを追加して整える。
エラーになったmigartionの後に実行するCircleCIのジョブが残っていた場合は、CIを再度実行すれば今度は該当のmigrationがスキップされ正常に残りのジョブを実行できるはずです。
参考記事
Discussion