Ежедневное обновление правил каталога не работает

15

Я сталкиваюсь с проблемой, что ежедневное обновление правил каталога Magento не работает. Это означает, что в момент истечения срока действия правила каталога изменений цен на товары не происходит, поэтому я должен нажать кнопку применения правила в Admin. Cron настроен и работает. Похоже, что catalogrule / наблюдатель :: 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. Пожалуйста, сообщите, в чем проблема, что правила не проверяются и применяются автоматически?

vovsky
источник
Есть ли какие-либо ошибки в журнале ошибок PHP или столбце сообщений в таблице cron_schedule? Я предполагаю, что на самом деле вызывается cron, поскольку вы указали, что добились некоторого успеха, изменив метод наблюдателя.
Давидгер
Также вы можете поместить несколько вызовов журнала в исходный наблюдатель и посмотреть, будет ли он вызван. Просто чтобы быть в безопасности на этом.
Петар Джамбазов

Ответы:

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таблицу еще раз, чтобы убедиться, что процессы cron выполняются автоматически.
  7. Надеюсь, в этот момент все хорошо. Идите вперед и вернитесь назад и настройте процессы cron для запуска с нужными интервалами.
pspahn
источник
3

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

Вы можете сделать это, проверив базу данных или установив это расширение: Aoe_Scheduler

Проверьте, работает ли работа

Создайте скрипт php run_my_rules.phpи поместите туда только содержимое для функции: dailyCatalogUpdateзатем запустите его из консоли. Посмотри, что происходит.

FlorinelChis
источник