Проблема Redis в Laravel 5.5 - вызов неопределенного метода Illuminate \ Support \ Facades \ Redis :: connect () - PullRequest
1 голос
/ 04 апреля 2019

Я переместил свое приложение Laravel 5.5 на другой сервер - там я использую точно такой же код (сделал git clone) с точно такими же файлами composer.json и composer.lock (даже конфигурация NGINX такая же).

Когда я запускаю свое приложение, я получаю следующую ошибку:

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Call to undefined method Illuminate\Support\Facades\Redis::connect()

Вот код:

namespace App\Http\Controllers;
use Illuminate\Http\Request;
...
public function somefunction() {
    $redis = new \Redis();
    $redis->connect(env('REDIS_HOST')); <-------------
...

Пакет композитора predis/predis установлен иУ меня нет php-redis в моей системе.

В обеих системах (Debian) Redis установлен и работает на 127.0.0.1.Обе системы используют одну и ту же конфигурацию в .env и в config/*:

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Единственное отличие состоит в том, что в одной системе (старой) я запускаю php7.0 ина новой системе я запускаю php7.3 - я переключился на php7.0 на новой системе, чтобы проверить, является ли это ошибкой, но я все еще получаю исключение.

Еще раз - на моем другом сервере все работаетхорошо с точно таким же кодом, который расстраивает меня - я не могу понять, почему это происходит.

1 Ответ

1 голос
/ 04 апреля 2019

Я думаю, что вам нужно проверить несколько основных шагов:

1) Во-первых, убедитесь, что у вас установлено расширение phpredis PHP

2) Если у вас есть кластер в конфигурации redis, убедитесь, что он установлен в false: см.

'cluster' => false,

3) Попробуйте проверить, что сервер Redis работает и клиент Redis может подключиться к нему. Иногда сервер redis неожиданно падает или закрывается, после чего вам может потребоваться перезапустить или закрыть его и снова работать.

4) Если вы работаете в среде * nix, вы можете проверить вывод netstat, чтобы узнать, прослушивает ли Redis какой-либо порт (скажем, 6379), для которого он настроен на прослушивание:

netstat -na | grep 6379

Вы должны увидеть вывод, как этот, если он слушает:

tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:53760 127.0.0.1:6379 TIME_WAIT tcp 0 0 127.0.0.1:6379 127.0.0.1:48107 ESTABLISHED tcp 0 0 127.0.0.1:53758 127.0.0.1:6379 TIME_WAIT tcp 0 0 127.0.0.1:48107 127.0.0.1:6379 ESTABLISHED

5) в app / config / cache.php установите для драйвера значение redis:

'driver' => 'redis'

6) Попробуйте использовать redis в качестве драйвера в app / config / session.php:

'driver' => 'redis'

7) добавьте следующее в начало вашего источника:

use Illuminate\Redis\Database as Redis;

или

"use Illuminate\Support\Facades\Redis"

8) Попробуйте изменить псевдоним класса на RedisL4 в app / config / app.php, как

'RedisL4' => 'Illuminate\Support\Facades\Redis',

и затем использование этого кода, вероятно, решает проблему:

$redis = RedisL4::connect(); или, что более важно, его "соединение", а не "соединение", поэтому

$redis = RedisL4::connection(Your-Connection-Here);

...