Shopware()->Db()->fetchAll($sql) plötzlich fehlerhaft im Cronjob

Hallo zusammen,

nach einem Update von 5.4.2 auf 5.4.3 läuft ein Cronjob nicht mehr durch.

Als Ursache konnte ich folgenden Befehl identifizieren:

Shopware()->Db()->fetchAll($sql)

Dort bleibt der Cronjob hängen und bricht mit false ab.

Der SQL-Befehl kann bswp. per phpMyAdmin fehlerfrei ausgeführt werden und liefert Ergebnisse.

Wie kann identifiziert werden, warum das nun nicht mehr geht? Davor lief es monatelang ohne Probleme.

Vielen Dank und Grüße,
Frank

Na Debuggen:

@BestShopPossible schrieb:

Na Debuggen:

https://www.jetbrains.com/help/phpstorm/debugging-with-phpstorm-ultimate-guide.html

Aber wie mache ich das bei einem Cronjob der zum Zeitpunkt X läuft? 

Manuell starten per CLI

https://developers.shopware.com/developers-guide/shopware-5-cli-commands/

 

1 „Gefällt mir“

Guten Abend zusammen,

gibt es schon eine Lösung in dieser Angelegenheit? Mich betrifft wahrscheinlich ein ähnliches Problem. Einer meiner Cronjobs, der seither immer lief, hat mich seit dem Update auf 5.4.3 verlassen. Bei jedem Versuch der Ausführung wird der Cronjob deaktiviert, obwohl nicht einmal das Häkchen „Bei Fehler deaktivieren“ gesetzt ist. Das Problem betrifft unter anderem auch den Cronjob / das Plugin „ArticleStock“.

Gruß
Yannick

Ich weiß nicht, ob unser beider Probleme überhaupt zusammenhängen, habe jetzt aber eine Fehlermeldung, die bei Ausführung des Cronjobs generiert wird. Diese bezieht sich jedoch nicht auf die SQL-Abfrage, sondern rückt eher die Datei “TemplateMail.php” in den Mittelpunkt. Hieran wurde im Zuge des Updates ja auch gearbeitet. Ob es damit zusammenhängen kann? Der Cronjob bzw. das Plugin ist mit Ausnahme der SQL-Abfrage baugleich mit dem “ArticleStock”-Plugin. Jemand eine Idee?

Status: 500 Internal Server Error
X-Powered-By: PHP/7.2.5
Content-type: text/html; charset=iso-8859-1

PHP Fatal error: Uncaught Error: Call to a member function getTemplate() on null in /mnt/web207/d3/04/58169104/htdocs/shop/engine/Shopware/Components/TemplateMail.php:167
Stack trace:
#0 /mnt/web207/d3/04/58169104/htdocs/shop/engine/Shopware/Plugins/Local/Core/CronArticle2Check/Bootstrap.php(122): Shopware_Components_TemplateMail->createMail(Object(Shopware\Models\Mail\Mail), Array)
#1 /mnt/web207/d3/04/58169104/htdocs/shop/engine/Library/Enlight/Event/Handler/Plugin.php(149): Shopware_Plugins_Core_CronArticle2Check_Bootstrap->onRun(Object(Shopware_Components_Cron_CronJob))
#2 /mnt/web207/d3/04/58169104/htdocs/shop/engine/Library/Enlight/Event/EventManager.php(258): Enlight_Event_Handler_Plugin->execute(Object(Shopware_Components_Cron_CronJob))
#3 /mnt/web207/d3/04/58169104/htdocs/shop/engine/Library/Enlight/Components/Cron/Manager.php(282): Enlight_Event_EventManager->notifyUntil('Shopware_CronJo...', Object(Shopware_Components_Cron_CronJob))
#4 /mnt/web207/d3/04/58169104/htdocs/shop/engine/Shopware/Commands/CronRunCommand.p in /mnt/web207/d3/04/58169104/htdocs/shop/engine/Shopware/Components/TemplateMail.php on line 167

Gruß
Yannick

Hey @beierle‍,

da ist in 5.4.3 ein Fehler eingeschlichen. Ein Workaround ist den Shop Parameter bei der createMail Methode anzugeben. Dadurch sollte dein Cron wieder laufen.

Für das Verhalten gibs bereits ein Ticket Shopware Issuetracker und wird mit 5.4.4 angegangen.

1 „Gefällt mir“

Vielen lieben Dank @Shyim‍ für die guten Nachrichten!

Beim Versuch den Shop-Parameter in der createMail-Methode anzugeben bin ich leider gescheitert. Habe sicher etwas verkehrt gemacht. Kannst du mir noch einen Tipp geben? Ansonsten bin ich aber schon sehr zufrieden, dass der Fehler bekannt ist und behoben werden soll. Irgendwie werde ich die Zeit bis dahin wohl auch ohne den Cron überbrücken können. :wink:

Gruß
Yannick

@beierle schrieb:

Vielen lieben Dank @Shyim‍ für die guten Nachrichten!

Beim Versuch den Shop-Parameter in der createMail-Methode anzugeben bin ich leider gescheitert. Habe sicher etwas verkehrt gemacht. Kannst du mir noch einen Tipp geben? Ansonsten bin ich aber schon sehr zufrieden, dass der Fehler bekannt ist und behoben werden soll. Irgendwie werde ich die Zeit bis dahin wohl auch ohne den Cron überbrücken können. :wink:

Gruß
Yannick

Beispiel:

$shop = Shopware()->Models()->getRepository('Shopware\Models\Shop\Shop')->getActiveById(1);
$mail = Shopware()->TemplateMail()->createMail('sXYZ', $mail_context, $shop);

Bei getActiveById(1) die entsprechende Shop-ID einsetzen.

Grüße,
Frank

2 „Gefällt mir“

Hip hip, hurra! Das hat geklappt. Vielen Dank euch beiden!

Gruß
Yannick

Vollständigkeitshalber der Fehler ist nun mit 5.4.4 behoben   Halo

Leute, weil ich es gerade sehe: Bei Shopware immer nur maximal PHP 7.1 verwenden!!!

Den IonCube Loader gibt es zwar schon für PHP 7.2, aber die ganzen verschlüsselten Plugins wurden noch mit der alten Version verschlüsselt und gehen somit nur bis PHP 7.1.