Ich habe einen Zeitplanjob, der jedes Mal eine Funktion aufruft. Diese Funktion macht eine Menge Sache, die vielleicht eine Ausnahme auslöst oder mir einen Fehler gibt.Abrufen eines Zeitplanauftrags in Laravel
Dies geschieht in einer Schleife, wenn ein Fehler auftritt, funktioniert die Funktion nicht mehr und bleibt stecken, bis ich den Eintrag lösche, der den Fehler verursacht (oder den Fehler behebe).
Etwas wie folgt aus:
public function process_documents()
{
$documents = document::where("processed", 0)->get();
foreach($documents as $document)
{
$this->do_this($document);
$this->do_that($document);
$this->finish($document);
}
}
Lösungen, die ich allerdings haben:
1- einen Befehl machen, die einen Befehl ausführt.
foreach($documents as $document)
{
Artisan::call("document:process",$document->id);
}
2- try catch überall
Ich weiß, dass sie beide funktionieren würde, aber ich würde gerne wissen, ob es einen anderen Weg.
Natürlich repariere ich es jedes Mal, aber ich möchte nicht um 04:00 Uhr babysitten, weil etwas unerwartet abgestürzt ist. Vor allem, wenn ich nicht der einzige bin, der im Projekt arbeitet. – prgrm
Das ist ein guter Rat. Obwohl ich glaube, dass "try/catch" Blöcke ihren Zweck und Platz haben. @prgrm erwähnt auch die Funktion, die viel tut. Untersuchen Sie die Trennung von Bedenken und gliedern Sie sie in kleinere, besser handhabbare Funktionen auf. – fubar
Ich stimme zu, dass ein Versuch/Catch, um das Problem pro Dokument zu finden, in Ordnung wäre. Aber so wie ich es verstand, wollte er versuchen, jede einzelne Funktion zu überlisten. – Jerodev