Heroku上のLaravelでRedisを使う

  • 0
    いいね
  • 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のリポジトリがこうなっているため