Help us understand the problem. What is going on with this article?

Laravel Redisのライブラリをインストールしたらエラーが発生した

目的

  • LaravelのセッションをAWSのElastiCatcheで管理しようと思いpredis/predisをインストール後にローカルサーバを起動したときのエラーの解決方法をまとめる

実施環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.5)
ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
プロセッサ 2 GHz クアッドコアIntel Core i5
メモリ 32 GB 3733 MHz LPDDR4
グラフィックス Intel Iris Plus Graphics 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.8 Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールする
Laravel バージョン 6.X commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする

前提情報

問題までの経緯

  1. アプリ名ディレクトリで下記コマンドを実行してライブラリを取得した。

    $ composer require predis/predis
    
  2. アプリ名ディレクトリで下記コマンドを実行してローカルサーバを起動した。

    $ php artisan serve
    
  3. 当該アプリの.envファイルのSESSION_DRIVER=fileの記載をSESSION_DRIVER=redisに変更した。

  4. 下記にアクセスした。

問題

  • ブラウザで下記のエラーが表示された。

    • Please make sure the PHP Redis extension is installed and enabled.
    • 訳: PHPRedis拡張機能がインストールされ有効になっていることを確認してください。

    🧨_Please_make_sure_the_PHP_Redis_extension_is_installed_and_enabled__と_ElastiCatche.png

問題解決までの経緯

  1. おそらく.envファイルのSESSION_DRIVER=SESSION_DRIVER=redisとなっているときにPhpRedis PHP拡張が導入されていないと本エラーが出るようである。公式ドキュメントでRedisを使用する際はPhpRedis PHP拡張を入れて使うことが推奨されている。
  2. とはいえpredis/predisのライブラリが入っていれば動くはずであるが、推奨されている通りにPhpRedis PHP拡張を入れたら解決しそうである。
  3. 下記方法でMacのローカルにPhpRedis PHP拡張をインストールした。
  4. ローカルサーバを起動して下記にアクセスしてみた。
  5. 一向にページが表示されず挙げ句には下記のエラーを返してきた。
    • Operation timed out
  6. 下記の公式ドキュメントを見ていったらpredis/predisのライブラリを使用する際はconfig/database.phpのredis配列のclientキーの第二引数を'predis'に書き換えろと書いてあったPhpRedis PHP拡張をインストールしてしまったが本方法を試してみる。
  7. 下記コマンドを実行してPhpRedis PHP拡張をアンインストールする。

    $ pecl uninstall redis
    
  8. 下記コマンドを実行してphp.iniファイルの場所を出力する。

    $ php -r "echo phpinfo();" | grep "php.ini"
    
  9. 下記コマンドを実行してphp.iniファイルのバックアップを作成する。(下記コマンドは筆者の環境でのphp.iniファイルの場所を指しており、皆さんは先のコマンドで出力されたphp.iniのパスを指定してバックアップを作成していただきたい。)

    cp /usr/local/etc/php/7.4/php.ini /usr/local/etc/php/7.4/php.ini_org
    
  10. 下記コマンドを実行してphp.iniファイルを開く。(下記コマンドは筆者の環境でのphp.iniファイルの場所を指しており、皆さんは先のコマンドで出力されたphp.iniのパスを指定してファイルを開いていただきたい。)

    $ vi /usr/local/etc/php/7.4/php.ini
    
  11. ファイルに下記の記載があるはずなのでコメントアウト後に保存する。

    • 修正前

      /usr/local/etc/php/7.4/php.ini
      extension="redis.so"
      
    • 修正後

      /usr/local/etc/php/7.4/php.ini
      ;extension="redis.so"
      
  12. アプリ名ディレクトリで下記コマンドを実行して設定ファイルを開く。

    $ vi config/database.php
    
  13. 下記のように修正した。

    • 修正前

      config/database.php
      /*
      |--------------------------------------------------------------------------
      | Redis Databases
      |--------------------------------------------------------------------------
      |
      | Redis is an open source, fast, and advanced key-value store that also
      | provides a richer body of commands than a typical key-value system
      | such as APC or Memcached. Laravel makes it easy to dig right in.
      |
      */
      
      'redis' => [
      
          'client' => env('REDIS_CLIENT', 'phpredis'),
      
          'options' => [
              'cluster' => env('REDIS_CLUSTER', 'redis'),
              'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
          ],
      
          'default' => [
              'url' => env('REDIS_URL'),
              'host' => env('REDIS_HOST', '127.0.0.1'),
              'password' => env('REDIS_PASSWORD', null),
              'port' => env('REDIS_PORT', '6379'),
              'database' => env('REDIS_DB', '0'),
          ],
      
          'cache' => [
              'url' => env('REDIS_URL'),
              'host' => env('REDIS_HOST', '127.0.0.1'),
              'password' => env('REDIS_PASSWORD', null),
              'port' => env('REDIS_PORT', '6379'),
              'database' => env('REDIS_CACHE_DB', '1'),
          ],
      
      ],
      
    • 修正後

      config/database.php
      /*
      |--------------------------------------------------------------------------
      | Redis Databases
      |--------------------------------------------------------------------------
      |
      | Redis is an open source, fast, and advanced key-value store that also
      | provides a richer body of commands than a typical key-value system
      | such as APC or Memcached. Laravel makes it easy to dig right in.
      |
      */
      
      'redis' => [
      
          /* 下記を修正した */
          'client' => env('REDIS_CLIENT', 'predis'),
      
          'options' => [
              'cluster' => env('REDIS_CLUSTER', 'redis'),
              'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
          ],
      
          'default' => [
              'url' => env('REDIS_URL'),
              'host' => env('REDIS_HOST', '127.0.0.1'),
              'password' => env('REDIS_PASSWORD', null),
              'port' => env('REDIS_PORT', '6379'),
              'database' => env('REDIS_DB', '0'),
          ],
      
          'cache' => [
              'url' => env('REDIS_URL'),
              'host' => env('REDIS_HOST', '127.0.0.1'),
              'password' => env('REDIS_PASSWORD', null),
              'port' => env('REDIS_PORT', '6379'),
              'database' => env('REDIS_CACHE_DB', '1'),
          ],
      
      ],
      
  14. 別のエラーが発生したが問題になっていたPhpRedis PHP拡張が存在しない旨のエラーは出なくなった。

miriwo
web系のバックエンドの知識を習得中! 2019/07/07~毎日更新中
https://miriwo.hatenablog.com/
boomtechcafe
埼玉県の朝霞台を拠点にエンジニアの勉強会、交流会等のイベントを企画しています! 朝霞台駅か北朝霞駅が全然行けちゃうぜってエンジニアの方がいたら是非! もくもく会とかゲーム大会とかもやれたらな~って思ってます。
https://boom-teck-cafe.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away