Heroku RedisをHerokuAppで複数利用
2018-10-18
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,
],