Guzzlehttp \ Exception \ ConnectionException: ошибка cURL 28, разрешающая тайм-аут после 2851 миллисекунды - PullRequest
1 голос
/ 29 марта 2019

Я недавно интегрировал Algolia с моим приложением laravel, используя библиотеку Laravel-Scout. Всякий раз, когда я пытаюсь найти любой продукт, используя algolia, я получаю GuzzelHttp \ Exception \ Connection \ Exception. Ниже приведен вывод на экран ответа. Та же проблема возникает и при синхронизации базы данных с сервером Algolia. Я дважды проверил свои учетные данные Algolia в моем проекте, и они совпадают правильно. Я запускаю этот проект в linux mint-18.04 LTS, используя сервер laravel по умолчанию (ни Apache, ни Nginx), ни сервер MySQL.

enter image description here

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Это можно решить следующим образом, если вы уже добавили Scout в свой проект:

  1. Создайте свой собственный app\Scout\EngineManager.php:
<?php declare(strict_types = 1);

namespace App\Scout;

use Algolia\AlgoliaSearch\Config\SearchConfig;
use Algolia\AlgoliaSearch\SearchClient as Algolia;
use Algolia\AlgoliaSearch\Support\UserAgent;
use Laravel\Scout\EngineManager as BaseEngineManager;
use Laravel\Scout\Engines\AlgoliaEngine;

class EngineManager extends BaseEngineManager
{
    /**
     * Create an Algolia engine instance.
     *
     * @return \Laravel\Scout\Engines\AlgoliaEngine
     */
    public function createAlgoliaDriver()
    {
        $this->ensureAlgoliaClientIsInstalled();

        UserAgent::addCustomUserAgent('Laravel Scout', '7.0.0');

        $config = SearchConfig::create(config('scout.algolia.id'), config('scout.algolia.secret'));
        $config->setConnectTimeout(10);

        $algolia = Algolia::createWithConfig($config);

        return new AlgoliaEngine(
            $algolia,
            config('scout.soft_delete')
        );
    }
}
Создайте свой собственный app\Scout\Searchable.php:
<?php declare(strict_types = 1);

namespace App\Scout;

use Laravel\Scout\Searchable as BaseSearchable;

trait Searchable
{
    use BaseSearchable;

    /**
     * Get the Scout engine for the model.
     *
     * @return mixed
     */
    public function searchableUsing()
    {
        return app(EngineManager::class)->engine();
    }
}
Создайте свой собственный app\Providers\ScoutServiceProvider.php:
<?php declare(strict_types = 1);

namespace App\Providers;

use App\Scout\EngineManager;
use Laravel\Scout\ScoutServiceProvider as BaseScoutServiceProvider;

class ScoutServiceProvider extends BaseScoutServiceProvider
{
    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton(EngineManager::class, function ($app) {
            return new EngineManager($app);
        });

        parent::register();
    }
}
Исключить пакет разведчика по умолчанию из обнаружения пакета в вашем composer.json:
"extra": {
    "laravel": {
        "dont-discover": [
            "laravel/scout"
        ]
    }
},

Добавьте свой ScoutServiceProvider в список поставщиков в config/app.php.

Выполнить composer dumpautoload.

Всякий раз, когдадобавив черту Searchable к модели, добавьте к ней свою собственную черту вместо разведчика.

Если вы хотите сделать тайм-аут зависящим от среды, его можно извлечь внастройка конфига.Также имейте в виду, что приведенное выше является минимальным для того, чтобы заставить черту Searchable работать с более длительным тайм-аутом, другие классы также могут быть переопределены для работы других функций.

0 голосов
/ 29 апреля 2019

Algolia имеет время ожидания по умолчанию , и эта ошибка появляется, когда запросы превышают значение по умолчанию (я полагаю, 2 секунды). Вы можете проверить, сколько запросов может занять у вас: time host [ALGOLIA_ID].algolia.net. К сожалению, у Laravel Scout нет возможности переопределить это, и я не нашел хорошего обходного пути.

...