Как устранить ошибку «Predis \ ClientException: команда« EXiSTS »не является зарегистрированной командой Redis.»? - PullRequest
1 голос
/ 16 марта 2020

Я использую класс redis в своем настраиваемом провайдере, но не работает на сервере.

На локальном компьютере проблем нет, но я не понимаю, почему он не работает на сервере. сервер.

Когда я использую команды ремесленника, я получаю эту ошибку.

"Predis \ ClientException: команда 'EXiSTS' не является зарегистрированной командой Redis.

в / var / www/vhosts/website.com/laravel_folder/website/vendor/predis/predis/src/Profile/RedisProfile.php: 88 84 | {85 | $ commandID = strtoupper ($ commandID); 86 | 87 | if (! Isset ($ this-> commands [$ commandID])) {{1010 *

88 | throw new ClientException («Команда '$ commandID' не является зарегистрированной командой Redis."); 89 |} 90 | 91 | $ commandClass = $ this-> commands [$ commandID]; 92 | $ command = new $ commandClass ();

Трассировка исключений:

1 Predis \ Profile \ RedisProfile :: createCommand ("EXiSTS") / var / www/vhosts/website.com/laravel_folder/website/vendor/predis/predis/src/Client.php: 323

2 Predis \ Client :: createCommand ("существует") / var / www/vhosts/website.com/laravel_folder/website/vendor/predis/predis/src/Client.php: 314

Пожалуйста, используйте аргумент -v, чтобы увидеть больше деталей. "

Мой код:

public function boot()
    {
        $redis = new Redis();

        if ( !$redis->exists('activity_of_week') ) {
            $redis->set('activity_of_week',serialize( Activity::ofWeek(10) ));
        }

        if ( !$redis->exists('popular_companies') ) {
            $redis->set('popular_companies',serialize( TopRateCompanies::sortBy()->take(10) ));
        }

        $activityOfWeeks = $redis->get('activity_of_week');
        $popularCompanies = $redis->get('popular_companies');

        $popular = new PopularCategory();
        $popularCategories = $popular->take(10);

        View::composer('frontend.layout.footer', function ($view) use ($activityOfWeeks, $popularCompanies, $popularCategories) {
            /**
             * @var ViewAlias $view
             */

             $keys = [  'email'         => 'contact-email',
                        'facebook'      => 'facebook',
                        'instagram'     => 'instagram',
                        'twitter'       => 'twitter',
                        'youtube'       => 'youtube',
                        'phone'         => 'contact-phone',
                    ];

            $info = array_map( [$this,'contactInfo'],$keys );

            $view->with('contact', $info)
                    ->with('activityOfWeeks', $activityOfWeeks)
                    ->with('popularCompanies', $popularCompanies)
                    ->with('popularCategories', $popularCategories);
        });
    }

    public function contactInfo($key)
    {
        return Settings::where('key',$key)->firstOrFail()->value;
    }

Помогите мне, пожалуйста.

1 Ответ

2 голосов
/ 16 марта 2020

Это проблема локали. Я считаю, что вы используете Turki sh locale в вашем приложении. И это вызывает проблемы с функцией strtoupper.

Есть похожая проблема, которую вы можете посмотреть здесь: https://github.com/nrk/predis/issues/372

В качестве решения, если это приемлемо в вашем случае вы можете попробовать сменить местное. Или, как предлагается в этом выпуске, вы можете использовать фасад Redis Laravel. Redis::EXISTS вот так.

...