如何使用 magento 正确执行 cron 作业 - 异常 Mage_Core_Exception 消息无效 model/method 定义
How to execute cron job properly with magento - exception Mage_Core_Exception with message Invalid model/method definition
我会尽可能直截了当,我使用的是Magento 1.9。
我的简单 cron 模块中有以下代码,每次执行 cron 作业时,我都可以看到计划记录正常,但我在消息日志中看到以下错误。
exception 'Mage_Core_Exception' with message 'Invalid model/method
definition, expecting "model/class::method".' in /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/Mage.php:595
Stack trace: #0 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/code/core/Mage/Cron/Model/Observer.php(299):
Mage::throwException('Invalid model/m...')
#1 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/code/core/Mage/Cron/Model/Observer.php(72):
Mage_Cron_Model_Observer->_processJob(Object(Mage_Cron_Model_Schedule),
Object(Mage_Core_Model_Config_Element))
#2 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/code/core/Mage/Core/Model/App.php(1358):
Mage_Cron_Model_Observer->dispatch(Object(Varien_Event_Observer))
#3 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/code/core/Mage/Core/Model/App.php(1337):
Mage_Core_Model_App->_callObserverMethod(Object(Mage_Cron_Model_Observer), 'dispatch', Object(Varien_Event_Observer))
#4 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/Mage.php(448):
Mage_Core_Model_App->dispatchEvent('default', Array)
#5 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/test_cron.php(76):
Mage::dispatchEvent('default')
#6 {main}
我的配置:
config.xml
<?xml version="1.0"?>
<config>
<!-- lets define the module name and version -->
<modules>
<Mymodule_Update>
<version>0.1.0</version>
</Mymodule_Update>
</modules>
<frontend>
<!-- lets define the module router i.e. for request to any controller within the module and action e.g. mymodule/controller/action -->
<routers>
<update>
<use>standard</use>
<args>
<module>Mymodule_Update</module>
<frontName>mymoduleupdate</frontName>
</args>
</update>
</routers>
<!-- lets define the layout to be used by this module -->
<layout>
<updates>
<update module="Mymodule_Update">
<file>mymoduleupdate.xml</file>
</update>
</updates>
</layout>
</frontend>
<crontab>
<jobs>
<!-- every 5 minute-->
<mymodule_update_in>
<schedule>
<cron_expr>*/5 * * * * </cron_expr>
</schedule>
<run>
<model>
mymodule_update/updater::performUpdateIn
</model>
</run>
</mymodule_update_in>
<!-- every 5 minute-->
<mymodule_update_out>
<schedule>
<cron_expr>*/5 * * * * </cron_expr>
</schedule>
<run>
<model>
mymodule_update/updater::performUpdateOut
</model>
</run>
</mymodule_update_out>
</jobs>
</crontab>
<global>
<!-- lets define the models to use-->
<models>
<mymodule_update>
<resourceModel>mymodule_update_resource</resourceModel>
<class>Mymodule_Update_Model</class>
</mymodule_update>
<mymodule_update_resource>
<class>Mymodule_Update_Model_Resource</class>
</mymodule_update_resource>
</models>
<helpers>
<mymodule_update>
<class>Mymodule_Update_Helper</class>
</mymodule_update>
</helpers>
<resources>
<mymodule_update_setup>
<setup>
<module>Mymodule_Update</module>
<class>Mymodule_Update_Model_Resource_Setup</class>
</setup>
</mymodule_update_setup>
</resources>
<events>
</events>
</global>
</config>
我的class
Updater.php:
<?php
class Mymodule_Update_Model_updater
{
public function performUpdateIn()
{
die("hello in");
}
public function performUpdateOut()
{
die("hello out");
}
}
?>
我不知道为什么会这样,我试过使用
mymodule_update/updater::performUpdateOut
update/updater::performUpdateOut
或
mymodule_update/updater::performUpdateIn
update/updater::performUpdateIn
我得到了同样的错误。我会喜欢任何知道为什么会出错的人为我指明正确的方向,谢谢。
发现问题在于要执行的操作的 xml 标签之间的间距
即
<model>
mymodule_update/updater::performUpdateOut
</model>
应该是
<model>mymodule_update/updater::performUpdateOut</model>
同样适用于 performUpdateIn。
试图美化或允许某些代码编辑器在中间添加空格可能会导致数小时不必要的脑力劳动。
我会尽可能直截了当,我使用的是Magento 1.9。 我的简单 cron 模块中有以下代码,每次执行 cron 作业时,我都可以看到计划记录正常,但我在消息日志中看到以下错误。
exception 'Mage_Core_Exception' with message 'Invalid model/method definition, expecting "model/class::method".' in /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/Mage.php:595
Stack trace: #0 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/code/core/Mage/Cron/Model/Observer.php(299): Mage::throwException('Invalid model/m...')
#1 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/code/core/Mage/Cron/Model/Observer.php(72): Mage_Cron_Model_Observer->_processJob(Object(Mage_Cron_Model_Schedule), Object(Mage_Core_Model_Config_Element))
#2 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/code/core/Mage/Core/Model/App.php(1358): Mage_Cron_Model_Observer->dispatch(Object(Varien_Event_Observer))
#3 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/code/core/Mage/Core/Model/App.php(1337): Mage_Core_Model_App->_callObserverMethod(Object(Mage_Cron_Model_Observer), 'dispatch', Object(Varien_Event_Observer))
#4 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('default', Array)
#5 /Users/XXXXX/Sites/projects/php/web/magento/magento_test1.9/SRC/test_cron.php(76): Mage::dispatchEvent('default')
#6 {main}
我的配置: config.xml
<?xml version="1.0"?>
<config>
<!-- lets define the module name and version -->
<modules>
<Mymodule_Update>
<version>0.1.0</version>
</Mymodule_Update>
</modules>
<frontend>
<!-- lets define the module router i.e. for request to any controller within the module and action e.g. mymodule/controller/action -->
<routers>
<update>
<use>standard</use>
<args>
<module>Mymodule_Update</module>
<frontName>mymoduleupdate</frontName>
</args>
</update>
</routers>
<!-- lets define the layout to be used by this module -->
<layout>
<updates>
<update module="Mymodule_Update">
<file>mymoduleupdate.xml</file>
</update>
</updates>
</layout>
</frontend>
<crontab>
<jobs>
<!-- every 5 minute-->
<mymodule_update_in>
<schedule>
<cron_expr>*/5 * * * * </cron_expr>
</schedule>
<run>
<model>
mymodule_update/updater::performUpdateIn
</model>
</run>
</mymodule_update_in>
<!-- every 5 minute-->
<mymodule_update_out>
<schedule>
<cron_expr>*/5 * * * * </cron_expr>
</schedule>
<run>
<model>
mymodule_update/updater::performUpdateOut
</model>
</run>
</mymodule_update_out>
</jobs>
</crontab>
<global>
<!-- lets define the models to use-->
<models>
<mymodule_update>
<resourceModel>mymodule_update_resource</resourceModel>
<class>Mymodule_Update_Model</class>
</mymodule_update>
<mymodule_update_resource>
<class>Mymodule_Update_Model_Resource</class>
</mymodule_update_resource>
</models>
<helpers>
<mymodule_update>
<class>Mymodule_Update_Helper</class>
</mymodule_update>
</helpers>
<resources>
<mymodule_update_setup>
<setup>
<module>Mymodule_Update</module>
<class>Mymodule_Update_Model_Resource_Setup</class>
</setup>
</mymodule_update_setup>
</resources>
<events>
</events>
</global>
</config>
我的class Updater.php:
<?php
class Mymodule_Update_Model_updater
{
public function performUpdateIn()
{
die("hello in");
}
public function performUpdateOut()
{
die("hello out");
}
}
?>
我不知道为什么会这样,我试过使用
mymodule_update/updater::performUpdateOut
update/updater::performUpdateOut
或
mymodule_update/updater::performUpdateIn
update/updater::performUpdateIn
我得到了同样的错误。我会喜欢任何知道为什么会出错的人为我指明正确的方向,谢谢。
发现问题在于要执行的操作的 xml 标签之间的间距
即
<model>
mymodule_update/updater::performUpdateOut
</model>
应该是
<model>mymodule_update/updater::performUpdateOut</model>
同样适用于 performUpdateIn。
试图美化或允许某些代码编辑器在中间添加空格可能会导致数小时不必要的脑力劳动。