我最近使用Laravel-Scout库将Algolia与我的laravel应用程序集成在一起。无论何时,我尝试搜索使用algolia搜索任何产品,我得到GuzzelHttp \ Exception \ Connection \ Exception。以下是响应的屏幕输出。当我将数据库与Algolia的服务器同步时,也会出现同样的问题。我已经加倍检查了我的项目中的Algolia凭据,并且它们匹配正确。我在linux mint-18.04 LTS中运行这个项目,使用默认的laravel服务器(既不是Apache也不是Nginx)和MySQL服务器。
Algolia有default timeouts,当请求超过默认值时我会弹出此错误(我相信2秒)。您可以通过以下方式查看请求可能需要多长时间:time host [ALGOLIA_ID].algolia.net
。不幸的是,Laravel Scout无法覆盖这一点,我也没有找到一个好的解决方法。
它可以通过以下方式解决,因为您已经将Scout添加到项目中:
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
特征添加到模型时,添加自己的特征而不是Scout的特征。如果您希望使超时环境相关,可以将其解压缩到配置设置。另外请记住,以上是使Searchable
特性更长时间工作的最低要求,其他类也可能需要被覆盖以使其他功能正常工作。