Как бы вы пропустили Laravel Scout, если окружающая среда не является производственной?

У меня есть приложение, которое я пишу с Laravel. Я все еще довольно новичок со структурой и не понимаю большинство из них. Я использую Алголию в качестве поисковой системы с Laravel's Scout. В моделях вы добавляете use Searchable, черта, и записи автоматически передаются в Алголию, что круто. Я пытаюсь сделать простое утверждение if (App::environment('local'))" exit scoutМы просто не отправляем наши данные о разработке в Алголию. Разведчик также выдаст исключение, если я исчерпал хакерский уровень в 10000 записей в Алголии.

5 ответов

Решение

В вашем местном.env добавить

SCOUT_DRIVER=null

В производство добавить

SCOUT_DRIVER=algolia

В config/scout.php добавить

'driver' => env('SCOUT_DRIVER', 'null')

Автоматически это будет игнорироваться на местном уровне, но работать на производстве. Это всего лишь предложение. Попробуйте адаптировать его к вашему конкретному контексту.

В вашей местной среде вы можете позвонить YourModel::disableSearchSyncing(), что не позволит этой модели отправить данные в Алголию.

Обратное к этому методу YourModel::enableSeachSyncing(), но поиск включен по умолчанию, поэтому обычно его не нужно использовать.

создайте файл .env.testing в корне вашего проекта и просто установите

      SCOUT_DRIVER=null

это описано здесь, документ laravel

Ни одно из вышеуказанных решений не работает, я предлагаю вам проверить в toSearchableArray() метод внутри вашего User Модель. Если вы попытаетесь установить SCOUT_DRIVER=null в локальной среде вы столкнетесь с ошибкой, потому что ваше приложение имеет тенденцию продвигаться в Алголию в любой среде.

Попробуйте сделать это вместо этого:

public function toSearchableArray()
{
    if (! app()->isLocal()) {
        return [
            'username' => $this->username,
            'age'      => (string) $this->age,
            // and so on ...
        ];
    }
}

Согласно документации Laravel 5.3:

  1. Установить среду в .env файл:

    APP_ENV=local
    
  2. Определите текущую среду:

    $environment = App::environment();
    
  3. Проверить $environment и верните истину:

    if (App::environment('local')) {
        // The environment is local
    }
    if (App::environment('local', 'staging')) {
        // The environment is either local OR staging...
    }
    
Другие вопросы по тегам