HerokuにはRelease Phaseという機能があります。 これはアプリケーションのビルドが終わってリリースする直前に任意のコマンドを実行するもので、DBのマイグレーションやキャッシュの削除といった用途に使えます。
設定方法はProcfile
にrelease: command
の形式で書くだけです。例えば、Railsでmigrateとseed-fuを実行するのであれば以下のようになります。
release: bin/rails db:migrate db:seed_fu
web: bundle exec puma -C config/puma.rb
DBマイグレーションを忘れて500エラーはあるあるな話ですが、これで防ぐことができます。 コマンドが失敗したとき(0以外のステータスで終了したとき)はもちろんデプロイは行われません。
Herokuはかゆいところに手が届いて便利ですね。