Codzienna aktualizacja reguł katalogu nie działa

15

Mam problem z tym, że codzienna aktualizacja zasad Katalogu Magento nie działa. Oznacza to, że nie ma żadnych zmian cen produktów, gdy nadejdzie data wygaśnięcia reguły katalogu, więc muszę nacisnąć przycisk Zastosuj regułę w Administratorze. Cron jest skonfigurowany i działa. Wygląda na to, że metoda catalogrule / observer :: dailyCatalogUpdate powinna sprawdzać i stosować reguły automatycznie każdego dnia, ale tak nie jest (próbowałem również uruchomić ją ręcznie). Oto kod podstawowy Magento:

<!--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>

Obserwator:

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

    return $this;
}

Miałem sukces modyfikującą metodę obserwatora, jak poniżej:

/*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;
}

W ten sposób reguły są sprawdzane i stosowane codziennie, a ceny produktów zmieniają się, jeśli reguła wygasa. Nie wierzę, że to błąd Magento. Proszę doradzić, na czym polega problem polegający na tym, że reguły nie są sprawdzane i stosowane automatycznie?

Vovsky
źródło
Czy jakieś błędy są rejestrowane w dzienniku błędów PHP lub w kolumnie komunikatów w tabeli cron_schedule? Zakładam, że cron jest w rzeczywistości wywoływany, ponieważ wskazałeś, że odniosłeś pewien sukces, modyfikując metodę obserwatora.
davidalger
Możesz także umieścić niektóre wpisy w dzienniku w oryginalnym obserwatorze i sprawdzić, czy zostanie wywołane. Na wszelki wypadek.
Petar Dzhambazov

Odpowiedzi:

7

Ostatnio miałem ten sam problem, kiedy testowałem nową regułę ceny dla naszego projektu. Powodem mojego bólu głowy było to, że nie zauważyłem tego za każdym razem, gdy tworzysz nową regułę lub edytujesz niektóre z istniejących reguł - powinieneś nacisnąć przycisk „ Zastosuj reguły ”, aby Magento wiedział o zmianach w regułach.

Max Uroda
źródło
2
Dziękuję Ci bardzo. Masz rację: zapisywanie reguły nie wystarczy do zmian. Byłoby wspaniale mieć dodatkową kolumnę w siatce reguł z informacją, czy reguła została zastosowana czy nie.
vovsky
DailyCatalogUpdate powinien stosować reguły w nocy, jeśli nie naciśniesz tego przycisku. W przeciwnym razie jaki jest cel tego crona?
Goose
7

Upewnij się, że klikniesz „Zastosuj reguły”, nie zawsze wystarczy. Niedawno odkryłem, że jeśli cron nie zostanie poprawnie skonfigurowany, w pewnym momencie w przyszłości reguły nie zostaną zastosowane.

Nie byłem w stanie naprawdę dopracować, kiedy zasady przestały działać. W moim przypadku miałem garść zasad, które są stosowane w oparciu o grupę klientów (sprzedaż hurtowa).

  1. Sprawdź cron_scheduletabelę. Upewnij się, że masz tutaj kilka wpisów odpowiadających catalogrule_apply_all(myślę, że to jest nazwa procesu).
  2. Ustaw cronjob w pliku modułu CatalogRule, config.xmlaby uruchamiał się co około minutę (do testowania) za pomocą * / 1.
  3. Spójrz wstecz na cron_schedulestół i ładuj go co kilka minut. Powinieneś zobaczyć, że nowe procesy są dodawane / wykonywane automatycznie, bez konieczności ręcznego klikania cron.phppliku sklepu .
  4. Jeśli żaden z procesów nie jest aktualizowany ręcznie, SSH do witryny jako użytkownik, który jest właścicielem plików witryny. Z wiersza poleceń: crontab -e(możesz być w Vimie i nie wiesz, co robić, sugeruję google przy użyciu podstawowych poleceń Vima).
  5. Ustaw crontab do uruchomienia: */1 * * * * /path/to/your/cron.sh
  6. Teraz cron_scheduleponownie sprawdź tabelę, aby upewnić się, że procesy cron są wykonywane automatycznie.
  7. Mam nadzieję, że w tym momencie wszystko jest dobrze. Śmiało, cofnij się i ustaw procesy cron tak, aby działały w pożądanych odstępach czasu.
pspahn
źródło
3

Sprawdź, czy zadanie zostało zaplanowane

Możesz to zrobić, sprawdzając bazę danych lub instalując to rozszerzenie: Aoe_Scheduler

Sprawdź, czy zadanie działa

Utwórz skrypt php run_my_rules.phpi umieść tam tylko treść dla funkcji:dailyCatalogUpdate następnie uruchom ją z konsoli. Zobacz co się dzieje.

FlorinelChis
źródło