Die tägliche Aktualisierung der Katalogregeln funktioniert nicht

15

Ich habe das Problem, dass das tägliche Update der Katalogregeln von Magento nicht funktioniert. Das bedeutet, dass sich der Produktpreis nicht ändert, wenn das Ablaufdatum der Katalogregel erreicht ist. Ich muss daher in Admin auf die Schaltfläche zum Anwenden der Regel klicken. Cron ist konfiguriert und funktioniert. Die Methode catalogrule / observer :: dailyCatalogUpdate sollte anscheinend jeden Tag automatisch die Regeln überprüfen und anwenden, tut dies aber nicht (auch ich habe versucht, sie manuell zu starten). Hier ist der Magento-Kerncode:

<!--file: app/code/core/Mage/CatalogRule/etc/config.xml-->
<crontab>
    <jobs>
        <catalogrule_apply_all>
            <schedule>
                <cron_expr>*/1 * * * *</cron_expr>
            </schedule>
            <run>
                <model>catalogrule/observer::dailyCatalogUpdate</model>
            </run>
        </catalogrule_apply_all>
    </jobs>
    ...
</crontab>

Beobachter:

/*file app/code/core/Mage/CatalogRule/Model/Observer.php*/
public function dailyCatalogUpdate($observer)
{
    Mage::getResourceSingleton('catalogrule/rule')->applyAllRulesForDateRange();

    return $this;
}

Ich hatte den folgenden Erfolg beim Ändern der Beobachtermethode:

/*file app/code/core/Mage/CatalogRule/Model/Observer.php*/
public function dailyCatalogUpdate($observer)
{
    Mage::getModel('catalogrule/rule')->getResourceCollection()
                  ->walk(array(
                         Mage::getResourceSingleton('catalogrule/rule'),
                         'updateRuleProductData'
                  ));
    Mage::getResourceSingleton('catalogrule/rule')->applyAllRulesForDateRange();

    return $this;
}

Auf diese Weise werden die Regeln jeden Tag überprüft und angewendet und die Produktpreise werden geändert, wenn die Regeln ablaufen. Ich glaube nicht, dass es ein Fehler von Magento ist. Bitte teilen Sie uns mit, wo das Problem liegt, dass Regeln nicht automatisch überprüft und angewendet werden.

vovsky
quelle
Wurden Fehler in Ihrem PHP-Fehlerprotokoll oder in der Spalte messages in der Tabelle cron_schedule protokolliert? Ich gehe davon aus, dass der Cron tatsächlich aufgerufen wird, da Sie angegeben haben, dass Sie mit der Änderung der Observer-Methode einige Erfolge erzielt haben.
Davidalger
Sie können auch einige Protokollanrufe im ursprünglichen Beobachter platzieren und sehen, ob er aufgerufen wird. Nur um sicher zu gehen.
Petar Dzhambazov

Antworten:

7

Vor kurzem hatte ich das gleiche Problem, als ich eine neue Preisregel für unser Projekt testete. Und der Grund für meine Kopfschmerzen war, dass ich nicht jedes Mal bemerkte, wenn Sie eine neue Regel erstellen oder einige der vorhandenen Regeln bearbeiten - Sie sollten auf die Schaltfläche " Regeln anwenden " klicken, um Magento über Ihre Regeländerungen zu informieren.

Max Uroda
quelle
2
Vielen Dank. Sie haben Recht: Die Speicherregel reicht für Änderungen nicht aus. Es wäre toll, eine zusätzliche Spalte im Regelraster zu haben, in der angegeben wird, ob die Regel angewendet wurde oder nicht.
Vovsky
Das dailyCatalogUpdate soll nachts Regeln anwenden, wenn Sie diese Taste nicht drücken. Ansonsten, was ist der Zweck dieses Cron?
Gans
7

Es reicht nicht immer aus, auf "Regeln anwenden" zu klicken. Ich habe kürzlich festgestellt, dass die Regeln irgendwann in der Zukunft nicht mehr angewendet werden, wenn cron nicht richtig eingerichtet ist.

Ich konnte mich nicht wirklich festlegen, als die Regeln nicht mehr funktionierten. In meinem Fall hatte ich eine Handvoll Regeln, die basierend auf der Kundengruppe (Großhandel) angewendet werden.

  1. Überprüfen Sie die cron_scheduleTabelle. Stellen Sie sicher, dass Sie hier einige Einträge haben, die catalogrule_apply_all(ich denke, das ist der Prozessname) entsprechen.
  2. Stellen Sie den Cronjob in der config.xmlDatei des CatalogRule-Moduls so ein , dass er etwa jede Minute (zum Testen) mit * / 1 ausgeführt wird.
  3. Schauen Sie sich den cron_scheduleTisch noch einmal an und laden Sie ihn alle paar Minuten nach. Sie sollten sehen, dass neue Prozesse automatisch hinzugefügt / ausgeführt werden, ohne dass Sie jemals die cron.phpDatei Ihres Geschäfts manuell bearbeiten müssen .
  4. Wenn keiner der Prozesse manuell aktualisiert wird, geben Sie SSH als Benutzer, dem die Site-Dateien gehören, in die Site ein. Über eine Befehlszeile: crontab -e(Sie sind möglicherweise in Vim und wissen nicht, was Sie tun sollen. Ich empfehle Google, um grundlegende Vim-Befehle zu verwenden.)
  5. Setze die Crontab auf run: */1 * * * * /path/to/your/cron.sh
  6. Überprüfen Sie nun die cron_scheduleTabelle erneut, um sicherzustellen, dass Cron-Prozesse automatisch ausgeführt werden.
  7. Hoffentlich ist an diesem Punkt alles gut. Gehen Sie vor und gehen Sie zurück und stellen Sie Ihre Cron-Prozesse so ein, dass sie in den gewünschten Intervallen ausgeführt werden.
pspahn
quelle
3

Überprüfen Sie, ob der Job geplant wird

Sie können dies tun, indem Sie entweder die Datenbank überprüfen oder die folgende Erweiterung installieren: Aoe_Scheduler

Testen Sie, ob der Job funktioniert

Erstellen Sie ein PHP-Skript run_my_rules.phpund geben Sie dort nur den Inhalt für die Funktion ein: dailyCatalogUpdateFühren Sie diesen dann über die Konsole aus. Sehen Sie, was passiert.

FlorinelChis
quelle