Meilisearch-laravel-scout: Как настроить пользовательский тайм-аут для поиска?

Созданный на 26 апр. 2021  ·  8Комментарии  ·  Источник: meilisearch/meilisearch-laravel-scout

Я создал дроплет DigitalOcean, следуя вашему замечательному руководству, и успешно использую его с Laravel 👌

Единственная проблема, с которой я сталкиваюсь, это когда сервер не работает (остановлен вручную или процессор загружен более чем на 100%).
Я не могу найти, где я мог бы установить короткий тайм-аут, чтобы я мог отобразить ошибку?
Прямо сейчас он загружается бесконечно, ожидая ответа от мертвого сервера.

Самый полезный комментарий

Привет @desaintflorent ,

Я не уверен, что это то, о чем вы просили, но, основываясь на том, что сказал @ hi019 , вы можете переопределить MeilisearchServiceProvider для использования собственного http-клиента.

пример:

php artisan make:provider MeilisearchServiceProvider
<?php

namespace App\Providers;

use MeiliSearch\Client;

class MeilisearchServiceProvider extends \Meilisearch\Scout\MeilisearchServiceProvider
{
    public function register()
    {
        parent::register();

        $this->app->singleton(Client::class, function () {
            return new Client(config('meilisearch.host'), config('meilisearch.key'), new \GuzzleHttp\Client(['timeout' => 0.01]));
        });
    }
}

В тебе config/app.php

'providers' => [
    // Other Service Providers

    App\Providers\MeilisearchServiceProvider::class,
],

Затем вы должны отключить автоматическое обнаружение Meilisearch, добавив следующее в ваш composer.json

   ...
    "extra": {
        "laravel": {
            "dont-discover": [
                "meilisearch/meilisearch-laravel-scout"
            ]
        }
    },
   ...

И если я ничего не пропущу, вы должны быть в порядке, тайм-аут выкинет MeiliSearch\Exceptions\CommunicationException

try {
    $movies = Movie::search('b')->get();
} catch (\MeiliSearch\Exceptions\CommunicationException $e) {
    // do something
}

Если у кого-то есть лучший вариант, буду рад прочитать :smile:

Все 8 Комментарий

Привет @desaintflorent , если я не ошибаюсь, этот пакет не предоставляет возможность установить тайм-аут. Я не пользователь laravel, поэтому я не могу предложить обходной путь с laravel.
Если кто-то знает обходной путь, не стесняйтесь поделиться им по этой проблеме 🙂

Рад узнать, что вам понравился учебник по DO в нашей документации, мы делаем все возможное, чтобы обеспечить интеграцию хорошей документацией!

Я считаю, что это нужно сделать на уровне клиента Meilisearch PHP, передав клиенту собственный экземпляр GuzzleHTTP: https://github.com/meilisearch/meilisearch-php#customize -your-http-client

В настоящее время нет способа сделать это. Может быть, мы могли бы разрешить пользователю передавать пользовательский PHP-клиент Meilisearch в конфигурации

Это было бы отличным дополнением. Однако, согласно этой проблеме , где я объясняю контекст, в этом репозитории не будет никаких новых дополнений, которые не будут соответствовать larvel/scout.
Мы могли бы создать новый репозиторий, который будет больше похож на плагин meilisearch-laravel-scout-extended, и мы интегрируем в него такую ​​возможность. Я оставляю эту проблему открытой, так как это хорошая идея для улучшения для следующего репо (или следующей версии этого репо).

Привет @desaintflorent ,

Я не уверен, что это то, о чем вы просили, но, основываясь на том, что сказал @ hi019 , вы можете переопределить MeilisearchServiceProvider для использования собственного http-клиента.

пример:

php artisan make:provider MeilisearchServiceProvider
<?php

namespace App\Providers;

use MeiliSearch\Client;

class MeilisearchServiceProvider extends \Meilisearch\Scout\MeilisearchServiceProvider
{
    public function register()
    {
        parent::register();

        $this->app->singleton(Client::class, function () {
            return new Client(config('meilisearch.host'), config('meilisearch.key'), new \GuzzleHttp\Client(['timeout' => 0.01]));
        });
    }
}

В тебе config/app.php

'providers' => [
    // Other Service Providers

    App\Providers\MeilisearchServiceProvider::class,
],

Затем вы должны отключить автоматическое обнаружение Meilisearch, добавив следующее в ваш composer.json

   ...
    "extra": {
        "laravel": {
            "dont-discover": [
                "meilisearch/meilisearch-laravel-scout"
            ]
        }
    },
   ...

И если я ничего не пропущу, вы должны быть в порядке, тайм-аут выкинет MeiliSearch\Exceptions\CommunicationException

try {
    $movies = Movie::search('b')->get();
} catch (\MeiliSearch\Exceptions\CommunicationException $e) {
    // do something
}

Если у кого-то есть лучший вариант, буду рад прочитать :smile:

@shokme вам, вероятно, следует зарегистрировать провайдера в app.php: https://laravel.com/docs/8.x/providers#registering -providers

@shokme вам, вероятно, следует зарегистрировать провайдера в app.php: https://laravel.com/docs/8.x/providers#registering -providers

Действительно, я взял пример с локальной установки телескопа, но вы правы, я тоже думаю, что это лучше.

Всем спасибо за помощь!

@shokme ваш пример работает отлично, я понял ваш код, но мне потребовалось бы много времени, чтобы понять это :) Так что большое спасибо за вашу помощь.

Во-первых, когда я отключил автоматическое обнаружение Meilisearch, у меня возникла ошибка при запуске поиска («Драйвер [meilisearch] не поддерживается».)
Но, не отключая его, он работает в моей локальной среде. Скоро попробую в производстве.
Почему важно его отключить?

Я попытался воспроизвести вашу ошибку, и единственным способом было не расширять \Meilisearch\Scout\MeilisearchServiceProvider с App\Providers\MeilisearchServiceProvider .

Но код, который я вам показал, в основном из пакета telescope. Таким образом, «dont-discover» не будет регистрировать пакет по умолчанию и позволит вам загрузить его при необходимости. моя ошибка, вы можете избежать этого .

Теперь о App\Providers\MeilisearchServiceProvider , если я прав и вы не продлеваете провайдера из пакета, то работает, хорошо. Но, честно говоря, я не уверен, как это будет обрабатываться за кулисами.
Я предполагаю, что пакет Meilisearch будет зарегистрирован, а затем будет зарегистрирован пользовательский поставщик и переопределит синглтон клиента. Ваш выбор, расширять или нет на этом, поскольку я не могу дать четкого ответа.

Кстати, сегодня laravel-scout 9 был выпущен с поддержкой meilisearch в качестве основного пакета, вы можете использовать его, код этого пакета был объединен внутри scout, поэтому он ничего не изменит для вас.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

JexPY picture JexPY  ·  8Комментарии

curquiza picture curquiza  ·  17Комментарии

ctf0 picture ctf0  ·  7Комментарии

elfeffe picture elfeffe  ·  30Комментарии

husonghua picture husonghua  ·  5Комментарии