Heroku上のLaravelでRedisを使う

  • 2
    いいね
  • 0
    コメント

Heroku上に公開するLaravelアプリケーションでキャッシュサーバとしてRedisを使う場合の方法について。

前提

HerokuにはRedisのアドオンがいくつかありますが、Heroku Redisを使うことを前提にします1

アドオンの導入

まずheroku-redisアドオンを有効にしておきます。

heroku addons:create heroku-redis:hobby-dev

アドオンを有効にするとアプリケーションに環境変数 REDIS_URL がセットされます。

REDIS_URL.png

セキュリティのためほぼモザイクにしていますが、 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が使えるようになっているはずです。


  1. ほかのアドオンでもおそらく似たようなやり方になると思われます。たとえばRedis To Goというアドオンならば環境変数 REDISTOGO_URL を参照することになるようです。 

  2. GitHubのLaravelのリポジトリがこうなっているため