Щоденне оновлення правил каталогу не працює


15

Я стикаюся з проблемою, що щоденне оновлення каталогу Magento не працює. Це означає, що не настає зміни цін на продукти, коли настає дата закінчення правила каталогу, тому я повинен натиснути кнопку застосувати правило в адміністраторі. Cron налаштований і працює. Здається, що каталогrule / observer :: dailyCatalogUpdate метод повинен перевіряти та застосовувати правила кожен день, але це не так (також я намагався запустити його вручну). Ось основний код 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>

Спостерігач:

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

    return $this;
}

У мене був успіх змінити метод спостерігача, як показано нижче:

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

Таким чином правила перевіряються та застосовуються щодня, а ціни на продукти змінюються, якщо термін дії закінчується. Я не вірю, що це помилка Magento. Підкажіть, будь ласка, у чому полягає проблема в тому, що правила не перевіряються та застосовуються автоматично?


Чи є якісь помилки під час реєстрації у вашому журналі помилок PHP або стовпці повідомлень у таблиці cron_schedule? Я припускаю, що крон насправді викликається, оскільки ви вказали, що ви мали певний успіх, змінивши метод спостерігача.
davidalger

Також ви можете розмістити деякі дзвінки з журналу в оригінальний спостерігач і побачити, чи отримує виклик. Просто, щоб бути безпечним на цьому.
Петро Джамбазов

Відповіді:


7

Нещодавно у мене була така ж проблема, коли я тестував нове правило ціни на наш проект. А причиною мого головного болю було те, що я не помічав, що кожного разу, коли ви створюєте нове правило або редагуєте деякі з існуючих правил, вам слід натиснути кнопку « Застосувати правила », щоб Magento дізнався про зміни вашого правила.


2
Велике спасибі. Ви маєте рацію: правила збереження недостатньо для змін. Було б чудово мати додатковий стовпчик у сітці правил із зазначенням, застосовувалось чи ні.
вовський

DailyCatalogUpdate передбачає застосовувати правила щоночі, якщо не натиснути цю кнопку. Інакше яка мета цього крона?
Гуска

7

Переконайтесь, що натиснути "Правила застосування" - не завжди достатньо. Нещодавно я виявив, що якщо cron не встановлений належним чином, в якийсь момент в майбутньому правила не застосовуватимуться.

Я не зміг по-справжньому збити цвях, коли правила перестали працювати. У моєму випадку у мене було кілька правил, які застосовуються на основі групи клієнтів (оптом).

  1. Перевір cron_scheduleтаблицю. Переконайтеся, що тут є відповідні записи catalogrule_apply_all(я думаю, що це ім'я процесу).
  2. Встановіть cronjob у файлі модуля CatalogRule, config.xmlщоб він працював щохвилини або близько того (для тестування) за допомогою * / 1.
  3. Огляньтесь на cron_scheduleстіл і продовжуйте перезавантажувати його кожні пару хвилин. Ви маєте бачити, що нові процеси додаються / виконуються автоматично, без необхідності вручну натискати файл магазину cron.php.
  4. Якщо ви не бачите жодного з процесів оновлення вручну, SSH перейдіть на сайт як користувач, який володіє файлами сайту. З командного рядка: crontab -e(ви можете знаходитись у Vim і не знаєте, що робити, пропоную google використовувати основні команди Vim).
  5. Налаштуйте crontab для запуску: */1 * * * * /path/to/your/cron.sh
  6. Тепер cron_scheduleще раз перевірте таблицю, щоб переконатися, що процеси кронів виконуються автоматично.
  7. Сподіваємось, у цьому моменті все добре. Вперед і поверніться та встановіть, щоб ваші кронові процеси проходили через потрібні інтервали.

3

Перевірте, чи не запланована робота

Це можна зробити, перевіривши базу даних або встановити це розширення: Aoe_Scheduler

Перевірте, чи робота працює

Створіть скрипт php run_my_rules.phpі вставте туди лише вміст для функції: dailyCatalogUpdateпотім запустіть його з консолі. Подивіться, що відбувається.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.