HerokuのReviewAppsを使うときの小ネタ(HEROKU_APP_NAME,MySQL)

アプリ毎の名前やホスト名を設定したい

ReviewAppsがPR1つずつにアプリ名を環境変数で渡してくれる仕組みがあるのでそれを使うとよい

Review Apps | Heroku Dev Center

app.jsonに以下のような設定を追記すればOK

{
  "env":{
    "HEROKU_APP_NAME": {
      "required": true
    }
  }
}

HEROKU_APP_NAMEは (appname)-pr-(pull request No.) といったフォーマットが渡される。
自分のプロジェクトではこれを使って、S3へアップロードする処理でPR毎に出力ディレクトリを変更するようにしている

mysql2.gemを使いたい

プロジェクトのDBはMySQLなのでReviewAppsでもMySQL(ClearDB MySQL)を使った。
この時、DBへの接続URLは環境変数CLEARDB_DATABASE_URLに入ってくるのだが、URLmysql2:// ではなく mysql://から始まるためこのままだとmysql2.gemが使えない。

単体のアプリなら CLEARDB_DATABASE_URL を置き換えればいいのだが、ReviewAppsだとPR1つ1つに対して置き換えを行う必要が出てくるので現実的ではない。

結局以下のように強引に置き換えることにした

development:
  <<: *default
  url: <%= (ENV['CLEARDB_DATABASE_URL'] || ENV['DATABASE_URL'] || 'mysql2://localhost').gsub(/^mysql:/, 'mysql2:') %>