Правила каталога ежедневное обновление не работает
Я сталкиваюсь с проблемой, что ежедневное обновление правил каталога Magento не работает. Это означает, что при истечении срока действия правила каталога цены на товары не изменяются, поэтому я должен нажать кнопку применить правило в администраторе. Cron настроен и работает. Кажется, что метод catalogrule/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. Пожалуйста, сообщите, в чем проблема, что правила не проверяются и не применяются автоматически?
3 answers
Недавно у меня была такая же проблема, когда я тестировал новое правило ценообразования для нашего проекта. И причиной моей головной боли было то, что я не заметил, что каждый раз, когда вы создаете новое правило или редактируете некоторые из существующих правил, вы должны нажимать кнопку "Применить правила", чтобы Magento знал об изменениях в ваших правилах.
Не всегда достаточно нажать кнопку "Применить правила". Недавно я обнаружил, что если cron не настроен должным образом, в какой-то момент в будущем правила не будут применяться.
Я не смог по-настоящему разобраться, когда правила перестали работать. В моем случае у меня было несколько правил, которые применяются в зависимости от группы клиентов (оптовая торговля).
- Проверьте таблицу
cron_schedule
. Убедитесь, что у вас есть несколько записей здесь, соответствующихcatalogrule_apply_all
(я думаю, что это процесс имя).- Установите задание cron в файле модуля CatalogRule
config.xml
для запуска каждую минуту или около того (для тестирования) с помощью */1.- Оглянитесь на таблицу
cron_schedule
и продолжайте перезагружать ее каждые пару минут. Вы должны увидеть, как новые процессы добавляются/выполняются автоматически без необходимости вручную заходить в ваш магазинcron.php
файл.- Если вы не видите, как какие-либо процессы обновляются вручную, войдите на сайт по SSH от имени пользователя, которому принадлежат файлы сайта. Из командная строка:
crontab -e
(возможно, вы находитесь в Vim и не знаете, что делать, я предлагаю Google использовать основные команды Vim).- Установите кронтаб для запуска:
*/1 * * * * /path/to/your/cron.sh
- Теперь снова проверьте таблицу
cron_schedule
, чтобы убедиться, что процессы cron выполняются автоматически.- Надеюсь, на данный момент все хорошо. Продолжайте, вернитесь назад и настройте свои процессы cron на выполнение с требуемыми интервалами.
Проверьте, будет ли задание запланировано
Вы можете сделать это, либо проверив базу данных, либо установив это расширение: Aoe_Scheduler
Проверьте, работает ли задание
Создайте php-скрипт run_my_rules.php
и поместите туда только содержимое для функции: dailyCatalogUpdate
затем запустите его с консоли. Посмотрите, что происходит.