Magento-Bug: Katalogpreisregeln verschwinden über Nacht

Mit Katalogpreisregeln können komplexe Rabatte intuitiv hinterlegt werden.

Mit Katalogpreisregeln können komplexe Rabatte intuitiv hinterlegt werden.

Ein sehr spezieller Bug ist uns kürzlich bei einem neuen Kunden-Projekt aufgefallen: Die Katalogpreisregeln wurden nur für circa 24 Stunden angewiesen, danach wurden wieder die Katalogpreise ohne die hinterlegten Rabatte angezeigt.

Zur Info: Mit Katalogpreisregeln können in Magento Rabatte definiert werden. Durch das intuitive System können auch sehr komplexe Regeln (z.B. "10% Rabatt auf alle Produkte welche über CHF 500 kosten, nur für die Kundengruppe XY und nur bis Ende Monat") mit wenigen Klicks erstellt werden.

Im Hintergrund funktioniert das vereinfacht ausgedrückt so: Jede Nacht prüft Magento welche Katalogpreisregeln aktuell gültig sind. Für die gültigen Katalogpreisregeln wird für jeden Kunden und für jedes Produkt ein Eintrag erstellt mit dem rabattierten Preis. Ruft nun ein Kunde ein Produkt auf so prüft das System sofort ob für diesen Kunden ein aktuell gültiger rabattierter Preis hinterlegt ist. Falls ja, so wird dieser rabattierte Preis angezeigt anstelle des Katalogpreises. Eine sehr gute und detaillierte englischsprachige Anleitung des Systems findet man auf solvingmagento.com.

So weit die Erklärung der Katalogpreisregeln. Bei einem Kundenprojekt lag wie gesagt das Problem vor dass diese Katalogpreisregeln scheinbar nur für einen Tag gültig waren, bzw. über Nacht verschwanden. Die im oben genannten Blog-Post vorgeschlagenen Lösungsvorschläge schufen leider keine Abhilfe. Ein Kommentar auf derselben Seite hat uns jedoch in die richtige Richtung gelenkt.

Der Bug, der dabei entdeckt wurde kann wie folgt beschrieben werden: Der Prozess, welcher nächtlich die Katalogpreisregeln angewendet hat, wurde jeweils um 23:00 angewendet. Der Prozess, welcher dann sämtliche Katalogpreisrege neu erstellt jedoch erst am nächsten Tag, eine Stunde später, um 00:00. Dies hatte zur Folge dass der erstgenannte Prozess die Gültigkeit der Katalogpreisregeln mit dem Datum des Vortages gespeichert hat, der zweite Prozess, welcher die Katalogpreise neu erstellt hat jedoch nur Katalogpreisregeln berücksichtigt für den nächsten Tag (da er ja jeweils knapp nach Mitternacht ausgeführt hat).

Folglich fand die Neuindexierung der Katalogpreise jeweils ohne Berücksichtigung irgendwelcher Katalogpreisregeln statt, da diese ja jeweils das Gültigkeitsdatum vom Vor- und nicht vom aktuellen Tag hatten.

Die technische Erklärung dafür lautet wie folgt: Der erste Prozess, welcher die Katalogpreisregeln für den aktuellen Tag erstellt, wurde im Cronjob-Zeitplan wie folgt eingetragen (app/code/core/Mage/CatalogRule/etc/config.xml):

0 1 * * *

Und der zweite Prozess, welcher die Katalogpreisregeln dann auf sämtliche Produkte angewendet hat, wie folgt (app/code/core/Mage/Catalog/etc/config.xml):

0 2 * * *

Die Prozesse hätten also um 01:00 bzw. um 02:00 ausgeführt werden sollen. Durch unsere Server-Konfiguration welche eine andere Zeitzone verwendet wurden die Prozesse jedoch wie oben beschrieben bereits zwei Stunden vorher, also um 23:00 bzw. um 00:00, ausgeführt. Dies führte zum oben beschriebenen Problem...

Die Lösung war im Vergleich zur Ursachenforschung einfach: Einfach die beiden Cronjob-Einträge wie folgt anpassen, um die beiden Prozesse zwei Stunden später auszuführen:

app/code/core/Mage/CatalogRule/etc/config.xml (Linie 819):

0 3 * * *

app/code/core/Mage/Catalog/etc/config.xml (Linie 200):

0 4 * * *

PS: Brauchen Sie Hilfe beim Beheben von diesem oder einem anderen Fehler? Gerne stehen wir Ihnen dazu zur Verfügung! Füllen Sie einfach das unten stehende Kontaktformular aus oder rufen Sie uns an, wir helfen Ihnen gerne weiter.

Weitere interessante Artikel:

Zur Blog-Übersicht