Ruby
Rails
Heroku

Herokuでデプロイと同時にrake db:migrateを実行する

More than 1 year has passed since last update.

Railsで作ったアプリケーションをHeroku上で動かしているとき、デプロイと同時にrake db:migrateを実行したい場合が多いと思います。

少人数しか使用しない個人用のアプリケーションなどであれば、コードをデプロイした後、ターミナルからheroku run rake db:migrateを手動で実行すれば良いのですが、多くのアプリケーションではそういうわけにはいきません。トレタではサービスの一部にHerokuを使っており、この問題に悩んでいました。

現状だとrake db:migrateを行うHeroku Buildpackを作成して実現している場合が多いようです。

しかし、最近のHerokuにはRelease Phaseという機能があり、これを使って簡単にデプロイと同時にrake db:migrateを実行できます。


Release Phase

Release Phaseを使うには、アプリケーションのリポジトリ内にProcfileを用意します。

Procfileの中にreleaseコマンドを記述すると、その内容をHerokuのreleaseが作成された後に実行します。

例えば、

release: bundle exec rake db:migrate

web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}

というProcfileをリポジトリに追加し、デプロイを行うと、コードがHeroku上にデプロイされた後にrake db:migrateが実行され、pumaが起動します。


所感

今まではデプロイボタンを押すときに少し緊張していましたが、

Procfileに1行追加するだけで、手動rake db:migrateやBuildpackを使うよりも安全なデプロイが実現でき、社内でも非常に重宝しています。

今はまだbeta機能らしいですが、早く正式な機能として公開されて欲しいと思います。