Heroku上に公開するLaravelアプリケーションでキャッシュサーバとしてRedisを使う場合の方法について。
前提
HerokuにはRedisのアドオンがいくつかありますが、Heroku Redisを使うことを前提にします1。
アドオンの導入
まずheroku-redisアドオンを有効にしておきます。
heroku addons:create heroku-redis:hobby-dev
アドオンを有効にするとアプリケーションに環境変数 REDIS_URL がセットされます。
セキュリティのためほぼモザイクにしていますが、 redis://USERNAME:PASSWORD@HOST:PORT
の形式になっています。
URLを分解する
LaravelのRedisを含むデータベース設定はURLはそのまま使えないので、分解することになります。
database.php
'redis' => [
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
標準で2上記のように環境変数をセットする形になっているので、URLを分解し環境変数にセットします。
このため、database.phpの <?php
の直後に下記を加えます。
database.php
if (getenv('REDIS_URL')) {
$url = parse_url(getenv('REDIS_URL'));
putenv('REDIS_HOST='.$url['host']);
putenv('REDIS_PORT='.$url['port']);
putenv('REDIS_PASSWORD='.$url['pass']);
}
これを加えてデプロイするとHeroku上でRedisが使えるようになっているはずです。
-
ほかのアドオンでもおそらく似たようなやり方になると思われます。たとえばRedis To Goというアドオンならば環境変数 REDISTOGO_URL を参照することになるようです。 ↩