以前、ブートストラップが繰り返し失敗する大規模なサイトを持っていました。これは2コンテナ構成のインストールだったため、ブートストラップ中のマイグレーション時に古いコンテナが引き続き稼働していました。最終的に、ブートストラップ時に SKIP_POST_DEPLOYMENT_MIGRATIONS=1 を有効にし、新しいコンテナが起動した後にマイグレーションを実行することで問題を解決しました。ENV セクションに SKIP_POST_DEPLOYMENT_MIGRATIONS=1 を設定すると、マイグレーションが非常に高速になり、サイトはマイグレーション実行中(おそらく若干遅くなるかもしれませんが)も正常に機能できるようになりました。このマイグレーションには20分以上かかったと思います。
まだテストはしていませんが、同じ手法を使えば、シングルコンテナインストールでもダウンタイムを最小限に抑えられるのではないかと考えています。もし私の推測が正しければ、以下の手順を実行することになります。
app.ymlにSKIP_POST_DEPLOYMENT_MIGRATIONS=1を追加する./launcher rebuild appを実行する./launcher enter appを実行するSKIP_POST_DEPLOYMENT_MIGRATIONS=0でrake db:migrateを実行するapp.ymlの編集を元に戻す(ただし、アップグレードのたびに手動でマイグレーションを実行することを忘れないつもりであれば、この手順は不要です)- 念のため、再度ビルドして問題がないか確認する。そうしないと、4ヶ月後に再度試した際に何が原因だったのか全く分からなくなり、誰にも問題の原因を特定するのが難しくなる可能性があります
もし ./launcher が app.yml の編集を必要とせずに SKIP_POST_DEPLOYMENT_MIGRATIONS=1 を自動的に渡せる仕組みがあれば、編集が苦手な人にとって作業がもっと楽になると思います。
もし私が考えているようにこの作業を進めることができれば、発見した内容を新しいトピックとして報告する予定です。ただ、現在は煙の影響で大きなモニターがない部屋に隔離されています。(パンデミックだけでは足りなかったのでしょうか?さらに煙までするなんて。しかも私は火災現場から特に近いわけではありませんが。)