Rails+MySQL(ClearDB)でHeroku Review Appsを構築する

heroku/ruby ビルドパックを使うと、DATABASE_URL 環境変数から config/database.yml が作成される。データベースにMySQL(ClearDB)を使う場合、CLEARDB_DATABASE_URL にデータベース接続用のURLが設定されるため、config/database.yml が作成されない。

heroku-buildpack-run などを使ってビルドフェーズで database.yml を作成し、CLEARDB_DATABASE_URL のスキームを mysql:// から mysql2:// に変更して database.yml の url に設定することでRailsからデータベースに接続できる。

app.json

{
  "environments": {
    "review": {
      "addons": [
        "cleardb:ignite"
      ],
      "buildpacks": [
        { "url": "heroku/ruby" },
        { "url": "https://github.com/weibeld/heroku-buildpack-run.git" }
      ],
      "scripts": {
        "postdeploy": "rails db:migrate db:seed"
      }
    }
  }
}

config/database.review.yml

production:
  adapter: mysql2
  encoding: utf8
  url: <%= ENV["CLEARDB_DATABASE_URL"].sub("mysql://", "mysql2://") %>

buildpack-run.sh

#!/bin/bash
cp -v config/database.review.yml config/database.yml