docker-composeでデプロイする際に、RailsがDBプロセスの起動を待つようにする

はじめに

docker-composeでアプリをデプロイする際、pumaにせよunicornにせよ、Railsのアプリが立ち上がる前にデータベースが起動している必要があります。これはデータベースのコンテナが起動しているという意味ではなく、データベースのプロセスが立ち上がり、ポートが外部に向けて開放されており、他所から利用が可能になっている必要がある、ということでございます。

これを確認するための機構がdocker-composeにはありません。

実装

そこでwait-for-itと呼ばれるスクリプトを利用します。

これをdocker-compseのcommandから呼び出します。

docker-compose run web bin/wait_for_it db:3306 -- rake db:create

wait-for-itは特定のポートに対して、アクセスが可能であるか否かを判断するためのスクリプトです。そして、もしもアクセスが不可能であった場合、文字通りアクセスが可能になるのを待ってくれます。これを間に挟んでから、DBにアクセスすることで、望んだとおりの結果を得ることができます。

Rails

Posted by poison