Одиночная конфигурация Redis для локальных и производственных в Laravel? - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь установить одну конфигурацию Redis в database.php, чтобы охватить как локальные, так и производственные (Redis Cluster) среды в Laravel (5.8).

Эта конфигурация работает с моей локальной (* 1004)*) Экземпляр Redis:

'redis' => [

    'client' => 'predis',

    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => 0,
    ],

],

И это работает с моим производственным (APP_ENV=production) кластером Redis:

'redis' => [

    'client' => 'predis',

    'options' => [
        'cluster' => 'redis',
    ],

    'clusters' => [
        'default' => [
            [
                'host' => env('REDIS_HOST', 'localhost'),
                'password' => env('REDIS_PASSWORD', null),
                'port' => env('REDIS_PORT', 6379),
                'database' => 0,
            ],
        ],
    ],

],

Я хочу установить одну конфигурацию, чтобы, если APP_ENV=localустановлен, мой локальный экземпляр Redis используется, и настройка APP_ENV=production использует мой кластер Redis.

Я попытался сделать следующее (с REDIS_CLUSTER установленным в true) в моей среде APP_ENV=production:

'redis' => [

    'client' => 'predis',

    'cluster' => env('REDIS_CLUSTER', false),

    'options' => [
        'cluster' => 'redis',
    ],

    'clusters' => [
        'default' => [
            [
                'host' => env('REDIS_HOST', 'localhost'),
                'password' => env('REDIS_PASSWORD', null),
                'port' => env('REDIS_PORT', 6379),
                'database' => 0,
            ],
        ],
    ],

    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => 0,
    ],

],

, но это не с ошибкой MOVED .

Я разместил вопрос на laracasts.com / обсуждения , но это заставило меня запутаться, как мне кажетсяпредложить обновить код приложения (а не конфигурацию Redis в database.php), чтобы приспособить обе среды.Я чувствую, что мне не хватает чего-то очевидного в том, как должна работать конфигурация.

1 Ответ

0 голосов
/ 05 июля 2019

Не уверен, что это лучший (или правильный) способ достижения этого, но я закончил тем, что поместил следующую логику в начало моего database.php файла:

<?php

if (env('APP_ENV') == 'production') {
    $redis =  [
        'client' => 'predis',
        'options' => [
            'cluster' => 'redis',
        ],
        'clusters' => [
            'default' => [
                [
                    'host' => env('REDIS_HOST', 'localhost'),
                    'password' => env('REDIS_PASSWORD', null),
                    'port' => env('REDIS_PORT', 6379),
                    'database' => 0,
                ],
            ],
        ],
    ];
}
else {
    $redis = [
        'client' => 'predis',
        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],
    ];
}

return [

....

И с помощью следующей клавиши для моего redis:

    'redis' => $redis

Таким образом, моя производственная среда использует конфигурацию кластера Redis, а моя локальная - локальную конфигурацию.

Если кто-нибудь знает лучший способ сделать это, почему выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...