Guzzlehttp \ Exception \ ConnectionException:cURL错误28解析2851毫秒后的超时

问题描述 投票:0回答:1

我最近使用Laravel-Scout库将Algolia与我的laravel应用程序集成在一起。无论何时,我尝试搜索使用algolia搜索任何产品,我得到GuzzelHttp \ Exception \ Connection \ Exception。以下是响应的屏幕输出。当我将数据库与Algolia的服务器同步时,也会出现同样的问题。我已经加倍检查了我的项目中的Algolia凭据,并且它们匹配正确。我在linux mint-18.04 LTS中运行这个项目,使用默认的laravel服务器(既不是Apache也不是Nginx)和MySQL服务器。

enter image description here

php laravel-5 search-engine guzzle algolia
1个回答
0
投票

Algolia有default timeouts,当请求超过默认值时我会弹出此错误(我相信2秒)。您可以通过以下方式查看请求可能需要多长时间:time host [ALGOLIA_ID].algolia.net。不幸的是,Laravel Scout无法覆盖这一点,我也没有找到一个好的解决方法。


0
投票

它可以通过以下方式解决,因为您已经将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')
        );
    }
}
  1. 创建自己的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();
    }
}
  1. 创建自己的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();
    }
}
  1. composer.json中的包发现中排除默认侦察包:
"extra": {
    "laravel": {
        "dont-discover": [
            "laravel/scout"
        ]
    }
},
  1. 将您的ScoutServiceProvider添加到config/app.php的提供者列表中。
  2. 运行composer dumpautoload
  3. 每当将Searchable特征添加到模型时,添加自己的特征而不是Scout的特征。

如果您希望使超时环境相关,可以将其解压缩到配置设置。另外请记住,以上是使Searchable特性更长时间工作的最低要求,其他类也可能需要被覆盖以使其他功能正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.