目录规则每日更新不起作用


15

我面临Magento的目录规则每日更新不起作用的问题。这意味着当目录规则的到期日期到来时,产品价格没有任何变化,因此我必须在管理员中按规则应用按钮。Cron已配置并正常工作。看来catalogulule / 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表的messages列中?我假设实际上已经调用了cron,因为您指出通过修改观察者方法已经取得了一些成功。
davidalger 2013年

您也可以在原始观察者中进行一些日志调用,看看是否被调用。为了安全起见。
Petar Dzhambazov

Answers:


7

最近,当我为项目测试新的价格规则时遇到了相同的问题。而且令我头痛的原因是,我没有注意到每次创建新规则或编辑一些现有规则时,都应按“ 应用规则 ”按钮,以使Magento知道您的规则更改。


2
非常感谢你。没错:保存规则不足以进行更改。在规则网格中有额外的一栏来说明是否应用规则会很棒。
vovsky 2013年

如果不按该按钮,则dailyCatalogUpdate应该每晚应用规则。否则,该计划的目的是什么?

7

确保达到“应用规则”并不总是足够的。我最近发现,如果cron的设置不正确,则将来某个时候该规则将不适用。

当规则停止工作时,我无法真正确定。就我而言,我有一些基于客户群(批发)应用的规则。

  1. 检查cron_schedule表。确保您在此处有一些与之对应的条目catalogrule_apply_all(我认为这是进程名称)。
  2. 将CatalogRule模块config.xml文件中的cronjob设置为每分钟大约* / 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进程设置为以所需的时间间隔运行。

3

检查作业是否安排好

您可以通过检查数据库或安装此扩展名来执行此操作:Aoe_Scheduler

测试工作是否正常

创建一个php脚本run_my_rules.php,然后仅在其中放置该函数的内容:dailyCatalogUpdate然后从控制台运行该脚本。看看发生了什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.