Rails アプリの wercker docker 対応で PostgreSQL の対応

Wercker からマイグレーションせよというメールが来たので対応してみた - mallowlabsの備忘録 を参考に wercker のマイグレーションを実施した。
こちらの記事では MongoDB の例だったので、PostgreSQL の場合はどうするのかと調べた。

結論としては

box: ruby:2.3
services:
  - id: postgres
    env:
      POSTGRES_PASSWORD: ourlittlesecret
      POSTGRES_USER: myuser
build:
    steps:
        - bundle-install
        - rails-database-yml:
            service: postgresql-docker
        - script:
            name: echo ruby information
            code: |
                echo "ruby version $(ruby --version) running"
                echo "from location $(which ruby)"
                echo -p "gem list: $(gem list)"
        - script:
            name: db:migrate
            code: RAILS_ENV=test bundle exec rake db:migrate
        - script:
            name: rspec
            code: RAILS_ENV=test bundle exec rake spec
deploy:
  steps:
    - heroku-deploy:
        key: $HEROKU_KEY
        user: $HEROKU_USER
        app-name: $HEROKU_APP_NAME

のような感じで。

ポイントは

services:
  - id: postgres

のように PostgreSQL のコンテナを指定し、rails-database-yml で postgresql-docker を指定する。

        - rails-database-yml:
            service: postgresql-docker

すると http://devcenter.wercker.com/docs/services/postgresql に記載されている環境変数を使う database.yml を吐いて、正常に接続できるようになる。

rails-database-yml のタスクは
step-rails-database-yml/run.sh at master · wercker/step-rails-database-yml · GitHub

postgresql-docker を指定することに気付かずにハマった。