Heroku RedisをHerokuAppで複数利用

2018-10-18

#Heroku

Laravelで実装したWebアプリで、Heroku Redisを複数利用する時に悩んだ話です。

Heroku Redisを1Appに複数設置すると、2個目以降の接続情報の環境変数が変化します。
例えば、1個目はREDIS_URL、2個目はHEROKU_REDIS_IVORY_URL

単純にAppを作った時は問題ないのですが、パイプラインを使用していてちょっと困ったことに。
Develop、StagingやProductionで環境変数名がずれてしまいました。

アプリコード内でif-elseしなければいけないかと考えましたが、その必要はなく単純に、管理用の環境変数で解決できました。

Config Vars

Name Value
REDIS_URL [Heroku Redisが値を設定]
HEROKU_REDIS_IVORY_URL [Heroku Redisが値を設定]
MY_ENV_REDIS_A REDIS_URL
MY_ENV_REDIS_B HEROKU_REDIS_IVORY_URL

<Laravel Root>/config/database.php

  'redis' => [

    // ...

    // A用のRedis
    'default' => [
      'host' => parse_url(env(env('MY_ENV_REDIS_A', ''), ''), PHP_URL_HOST),
      'port' => parse_url(env(env('MY_ENV_REDIS_A', ''), ''), PHP_URL_PORT),
      'password' => parse_url(env(env('MY_ENV_REDIS_A', ''), ''), PHP_URL_PASS),
      'database' => 0,
    ],

    // B用のRedis
    'redisA' => [
      'host' => parse_url(env(env('MY_ENV_REDIS_B', ''), ''), PHP_URL_HOST),
      'port' => parse_url(env(env('MY_ENV_REDIS_B', ''), ''), PHP_URL_PORT),
      'password' => parse_url(env(env('MY_ENV_REDIS_B', ''), ''), PHP_URL_PASS),
      'database' => 0,
    ],

© kdtakahiro 2018