🔖

CircleCIのRails MigrationでToo long with no outputが発生した時の対処法

2022/10/02に公開

発生したエラー

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がスキップされ正常に残りのジョブを実行できるはずです。

参考記事

https://support.circleci.com/hc/ja/articles/360045268074--Too-long-with-no-output-exceeded-10m0s-context-deadline-exceeded-のエラーでビルド失敗した場合
https://qiita.com/jkr_2255/items/962861bf14f4749b992a

Discussion