こちらの記事に書いてありますが、HerokuのRedisはたまにアップデートされた節にHostとポートが変わってしまうことがあります。
https://qiita.com/usagizmo/items/7c5a338e339ebffd7eba
アップデートされると、自動で環境変数REDIS_URL
の値を書き換えますが、
Laravelは通常、HostやPostなどをわけて書くため、アップデートされるとある日突然Redisつながらなくなります。
そこで、Herokuが面倒見てくれるREDIS_URL
に合わせて、Redisの接続方法を変更しましょう!
configの変更
まず、こちらがデフォルトのRedisのconfig
config/database.php
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
],
'cache' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DB', 1),
],
],
REDIS_URL
をパースする方法に変更します
config/database.php
'redis' => [
'client' => 'predis',
'default' => [
'host' => parse_url(env('REDIS_URL'), PHP_URL_HOST),
'password' => parse_url(env('REDIS_URL'), PHP_URL_PASS),
'port' => parse_url(env('REDIS_URL'), PHP_URL_PORT),
'database' => env('REDIS_DB', 0),
],
'cache' => [
'host' => parse_url(env('REDIS_URL'), PHP_URL_HOST),
'password' => parse_url(env('REDIS_URL'), PHP_URL_PASS),
'port' => parse_url(env('REDIS_URL'), PHP_URL_PORT),
'database' => env('REDIS_CACHE_DB', 1),
],
],
環境変数
HostやPasswordと分けてた環境変数をREDIS_URL
にまとめます。
HerokuではRedisをアドオンすると自動で作られます。
ローカルでは以下のように設定します
REDIS_URL=redis://[HOST]:[PORT]
ユーザやパスワードの設定が必要ならこうなります
REDIS_URL=redis://[USER]:[PASSWORD]@[HOST]:[PORT]