HerokuにはRelease Phaseという機能があります。 これはアプリケーションのビルドが終わってリリースする直前に任意のコマンドを実行するもので、DBのマイグレーションやキャッシュの削除といった用途に使えます。

設定方法はProcfilerelease: 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はかゆいところに手が届いて便利ですね。