Ich habe nach Ihrem großartigen Tutorial ein DigitalOcean-Droplet erstellt und verwende es erfolgreich mit Laravel 👌
Das einzige Problem, das ich habe, ist, wenn der Server heruntergefahren ist (manuell gestoppt oder CPU bei mehr als 100%).
Ich kann nicht finden, wo ich ein kurzes Timeout einstellen könnte, damit ich einen Fehler anzeigen könnte?
Im Moment lädt es auf unbestimmte Zeit und wartet auf eine Antwort vom toten Server.
Hallo @desaintflorent , wenn ich mich nicht irre, bietet dieses Paket keine Option zum Festlegen eines Timeouts. Ich bin kein Laravel-Benutzer, daher kann ich mit Laravel keine Problemumgehung bereitstellen.
Wenn jemand einen Workaround kennt, kann er ihn gerne zu diesem Thema teilen 🙂
Ich freue mich zu lesen, dass Ihnen das DO-Tutorial in unserer Dokumentation gefallen hat. Wir tun unser Bestes, um Integrationen mit ansprechender Dokumentation bereitzustellen!
Ich glaube, dies müsste auf der Ebene des Meilisearch-PHP-Clients erfolgen, indem eine benutzerdefinierte GuzzleHTTP-Instanz an den Client übergeben wird: https://github.com/meilisearch/meilisearch-php#customize -your-http-client
Es gibt keine Möglichkeit, dies mit dem aktuellen zu tun. Vielleicht könnten wir dem Benutzer erlauben, einen benutzerdefinierten Meilisearch-PHP-Client in der Konfiguration zu übergeben
Dies wäre eine großartige Ergänzung. Laut dieser Ausgabe , in der ich den Kontext erkläre, wird dieses Repo jedoch keine neuen Ergänzungen haben, die nicht mit larvel/scout übereinstimmen
Wir könnten ein neues Repo erstellen, das eher ein Meilisearch-Laravel-Scout-erweitertes Plugin sein wird, und wir werden diese Art von Möglichkeit darin integrieren. Ich habe dieses Problem offen gelassen, da es eine gute Verbesserungsidee für das nächste Repo (oder die nächste Version dieses Repos) ist.
Hallo @desaintflorent ,
Ich bin mir nicht sicher, ob Sie danach gefragt haben, aber basierend auf dem, was @hi019 gesagt hat, können Sie den MeilisearchServiceProvider überschreiben, um einen benutzerdefinierten HTTP-Client zu verwenden.
Beispiel:
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]));
});
}
}
In dir config/app.php
'providers' => [
// Other Service Providers
App\Providers\MeilisearchServiceProvider::class,
],
Dann sollten Sie die automatische Erkennung von Meilisearch deaktivieren, indem Sie Folgendes zu Ihrer composer.json hinzufügen
...
"extra": {
"laravel": {
"dont-discover": [
"meilisearch/meilisearch-laravel-scout"
]
}
},
...
Und wenn ich nichts verpasse, solltest du brav sein, die Auszeit wirft ein MeiliSearch\Exceptions\CommunicationException
try {
$movies = Movie::search('b')->get();
} catch (\MeiliSearch\Exceptions\CommunicationException $e) {
// do something
}
Wenn jemand eine bessere Option hat, lese ich sie gerne :smile:
@shokme Sie sollten den Anbieter wahrscheinlich stattdessen in app.php registrieren: https://laravel.com/docs/8.x/providers#registering -providers
@shokme Sie sollten den Anbieter wahrscheinlich stattdessen in app.php registrieren: https://laravel.com/docs/8.x/providers#registering -providers
In der Tat habe ich das Beispiel von der lokalen Installation des Teleskops genommen, aber Sie haben Recht, ich denke auch, dass dies besser ist.
Vielen Dank für Ihre Hilfe!
@shokme dein Beispiel funktioniert perfekt, ich habe deinen Code verstanden, aber es hätte mich viel Zeit gekostet, das herauszufinden :) Also vielen Dank für deine Hilfe.
Nur eine Sache: Wenn ich die automatische Erkennung von Meilisearch deaktiviere, trat beim Ausführen einer Suche ein Fehler auf ("Treiber [meilisearch] wird nicht unterstützt." ).
Aber wenn ich es nicht deaktiviere, funktioniert es in meiner lokalen Umgebung. Werde es demnächst in der Produktion versuchen.
Warum ist es wichtig, es zu deaktivieren?
Ich habe versucht, Ihren Fehler zu reproduzieren, und die einzige Möglichkeit bestand darin, \Meilisearch\Scout\MeilisearchServiceProvider
nicht von App\Providers\MeilisearchServiceProvider
zu erweitern.
Aber der Code, den ich Ihnen gezeigt habe, stammt hauptsächlich aus dem Teleskoppaket. "Dont-Discover" wird das Paket also standardmäßig nicht registrieren und Ihnen erlauben, es bei Bedarf zu laden. Mein Fehler, das kannst du vermeiden .
Nun zu App\Providers\MeilisearchServiceProvider
, wenn ich richtig liege und du den Anbieter aus dem Paket nicht erweiterst, funktioniert es, gut. Aber um ehrlich zu sein, bin ich mir nicht sicher, wie es hinter den Kulissen gehandhabt wird.
Meine Vermutung ist, dass das Meilisearch-Paket registriert wird und dann der benutzerdefinierte Anbieter registriert wird und das Client-Singleton überschreibt. Sie haben die Wahl, dies zu erweitern oder nicht, da ich keine klare Antwort geben kann.
Übrigens, heute wurde Laravel-Scout 9 mit der Unterstützung von Meilisearch als First-Party-Paket veröffentlicht, vielleicht möchten Sie es verwenden, der Code dieses Pakets wurde in Scout zusammengeführt, sodass sich für Sie nichts ändert.
Hilfreichster Kommentar
Hallo @desaintflorent ,
Ich bin mir nicht sicher, ob Sie danach gefragt haben, aber basierend auf dem, was @hi019 gesagt hat, können Sie den MeilisearchServiceProvider überschreiben, um einen benutzerdefinierten HTTP-Client zu verwenden.
Beispiel:
In dir
config/app.php
Dann sollten Sie die automatische Erkennung von Meilisearch deaktivieren, indem Sie Folgendes zu Ihrer composer.json hinzufügen
Und wenn ich nichts verpasse, solltest du brav sein, die Auszeit wirft ein
MeiliSearch\Exceptions\CommunicationException
Wenn jemand eine bessere Option hat, lese ich sie gerne :smile: