适应自动变化的Heroku Redis端点的Laravel
根据这篇文章所写,Heroku的Redis偶尔会在更新时更改主机和端口。
https://qiita.com/usagizmo/items/7c5a338e339ebffd7eba
当进行更新时,会自动更改环境变量REDIS_URL的值,但是Laravel通常会将Host和Port等分开编写,因此一旦进行更新,Redis可能会突然无法连接。
因此,让我们根据Heroku提供的REDIS_URL来调整Redis的连接方式吧!
配置的修改
首先,这是默认的Redis配置。
'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的方法进行更改。
'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),
],
],
环境变量
在Heroku中,将分别保存为Host和Password的环境变量合并为REDIS_URL。当在Heroku上添加Redis插件时,将自动创建REDIS_URL。
在本地进行以下设置
REDIS_URL=redis://[HOST]:[PORT]
如果需要设置用户名和密码,将会是这样。
REDIS_URL=redis://[USER]:[PASSWORD]@[HOST]:[PORT]