PHP: Magento: Cron job抛出“无效回调”例外


PHP: Magento: Cron job throwing "Invalid callback" exception

好吧,这已经让我抓狂了4个小时了。我想对Magento做一个cronjob。以下是我的相关目录结构:

|app
   |code
      |local
         |MOST
            |Wallet
                |etc
                   |config.xml
                |Model
                   |Cron.php

以及我的config.xml

<?xml version="1.0"?>
<config>
  <modules>
    <MOST_Wallet>
      <version>0.1.0</version>
    </MOST_Wallet>
  </modules>
  <global>
    <helpers>
      <wallet>
        <class>MOST_Wallet_Helper</class>
      </wallet>
    </helpers>
    <models>
        <wallet>
            <class>MOST_Wallet_Model</class>        
        </wallet>
    </models>
  </global>
  <crontab>
        <jobs>
            <most_wallet>
                <schedule>
                    <cron_expr>* * * * *</cron_expr>
                </schedule>
                <run>
                    <model>MOST_Wallet/cron::updateWallet</model>
                </run>
            </most_wallet>
        </jobs>
    </crontab>
</config> 

文件Cron.php存在,并且其中有updateWallet方法,检查是否有拼写错误:)

cron没有启用,但这是不相关的,因为现在我试图使cron.php通过直接打开它来手动执行我的脚本。这种测试方法有效,因为所有其他cron任务似乎都工作得很好。

现在,cron作业失败了。经过一番搜索,我发现了正在抛出的错误。

警告:include(Mage/MOST/Wallet/Model/Cron.php): failed to open stream: No such file or directory in/var/www.magento_test/lib/Varien/autolload .php第93行

你们可以看到,由于某种原因,Magento试图从Mage文件夹加载我的Cron类,而不是从本地文件夹。这会导致Cron Observer抛出"Invalid callback"异常。

如果有人知道是什么原因引起的,我将非常感激。

编辑:

正如Dushyant Joshi所说,配置应该是:

<config>
---
<crontab>
        <jobs>
            <most_wallet>
                <schedule>
                    <cron_expr>* * * * *</cron_expr>
                </schedule>
                <run>
                    <model>wallet/cron::updateWallet</model><!-- change here -->
                </run>
            </most_wallet>
        </jobs>
</crontab>

这个错误也是类MOST_Wallet_Model_Cron的名字中的一个错字。毕竟,错别字会造成最严重的错误。

欢呼。

按如下方式修改代码:

<config>
---
    <crontab>
            <jobs>
                <most_wallet>
                    <schedule>
                        <cron_expr>* * * * *</cron_expr>
                    </schedule>
                    <run>
                        <model>wallet/cron::updateWallet</model><!-- change here -->
                    </run>
                </most_wallet>
            </jobs>
    </crontab>
</config>

刷新缓存,然后检查