Не могу использовать Redis с Laravel

Я пытаюсь подключиться к серверу Redis, установленному на моем локальном сервере, из приложения Laravel (моя конечная цель — получить метрики Prometheus).

Redis жив и здоров (привязка только к 127.0.0.1, без аутентификации):

# systemctl status redis
[sudo] password for devel: 
● redis-server.service - Advanced key-value store
     Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-05-29 11:14:32 CEST; 1h 18min ago
       Docs: http://redis.io/documentation,
             man:redis-server(1)
   Main PID: 967352 (redis-server)
      Tasks: 4 (limit: 18663)
     Memory: 5.3M
     CGroup: /system.slice/redis-server.service
             └─967352 /usr/bin/redis-server 127.0.0.1:6379
May 29 11:14:32 Ubuntu-2004-services2 systemd[1]: Starting Advanced key-value store...
May 29 11:14:32 Ubuntu-2004-services2 systemd[1]: Started Advanced key-value store.

Файл .env содержит (помимо других значений):

REDIS_CLIENT=predis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Первая конечная точка, которую я настраиваю («/metrics»), вызывает метод \Prometheus\CollectorRegistry::getDefault()->getOrRegisterCounter('', 'some_quick_counter', 'just a quick measurement')->inc();

Ошибка, которую я постоянно получаю в журналах:

"Call to undefined method Illuminate\Support\Facades\Redis::connect()"

И фактически файл /vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php не содержит метода connect()...

Если это может помочь, я на:

  • Убунту 20.04.6 ЛТС
  • PHP 8.0.2
  • Ларавел/фреймворк 9.19
  • предис 2.2

Есть какие-нибудь подсказки?

Не верьте, что вы найдете этот метод в Фасаде. Что говорит вам redis-cli, когда вы пытаетесь подключиться? [redis.io/docs/latest/develop/connect/]

Andreas 29.05.2024 16:45

Как вы думаете, почему существует такой метод? В документации об этом не упоминается. Может быть, вы назвали неправильный класс?

miken32 29.05.2024 22:15

@Andreas: Команда redis-cli дает мне: «127.0.0.1:6379>». На просьбу "помощи" получаю: "redis-cli 5.0.7"

MarcoS 03.06.2024 17:10

@miken32: Я сам не использую метод `connect()... Это ошибка, которую я получаю в журналах Laravel, когда запрашиваю конечную точку теста...

MarcoS 03.06.2024 17:15

Понимаю, трудно сказать без трассировки стека. Вы смотрели этот исходный файл? Он намеренно вызывает Illuminate\Support\Facades\Redis::connect() или, возможно, ожидает, что \Redis::connect() будет существовать из какого-то расширения или другого, которое вы не установили?

miken32 03.06.2024 17:22

@miken32: Я полагаю, он ожидал, что \Redis::connect() будет существовать из расширения predis, которое я не устанавливал... Нет, я его установил, и ошибка изменилась: «Класс «Redis» не найден» в строке 23 файла /var/www/services/api-ski-test/app/Providers/PrometheusServi‌​ceProvider.php' сейчас я следую medium.com/@cgtysylr/… учебнику...

MarcoS 03.06.2024 17:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
122
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Необходимо правильно инициализировать CollectorRegistry, указав ему, какое соединение использовать. Для этого и нужен ServiceProvider.

В AppServiceProvider::register() вам нужно настроить адаптер Redis вот так

public function register(): void
{
  $this->app->singleton(CollectorRegistry::class, static function () {
        $config = config('database.redis.default');
        $redis = new \Prometheus\Storage\Redis([
            'host'         => $config['host'],
            'port'         => (int) $config['port'],
            'password'     => $config['password'],
            'read_timeout' => (string) ($config['read_timeout'] ?? '1'),
        ]);
    
        return new CollectorRegistry($redis);
    });
}

И затем получить CollectorRegistry из контейнера:

app(CollectorRegistry::class)->getOrRegisterCounter('','some_quick_counter', 'just a quick measurement')->inc()

Спасибо! Я проверю ваши предложения как можно скорее!

MarcoS 29.05.2024 22:30

Я не мог заставить все работать... Еще проблемы с интеграцией на стороне Prometheus... В итоге я использовал phpredis вместо Predis. Следуя этому руководству youtube.com/watch?v=h75blZ3LgUk Теперь у меня есть работающая интеграция... Тем не менее, спасибо, ваш ответ был правильным, но недостаточным для полной работы моей установки...

MarcoS 04.06.2024 14:57

Другие вопросы по теме