我试图找出如何使Zend Framework脚本从命令行作为cronjob运行,但下面的bootstrap设置似乎失败了:
define('BASE_PATH', realpath(dirname(__FILE__) . '/../') . '/');
define('APPLICATION_PATH', BASE_PATH . 'application/');
define('APPLICATION_ENV', 'live');
// Ensure library/ is on include_path
set_include_path(
implode(PATH_SEPARATOR, array(
realpath(BASE_PATH . 'library'),
realpath('/usr/src/ZendFramework-1.12.3/library')
) // closes array
) // closes implode
. get_include_path()
);
require_once 'Zend/Application.php';
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
// Load only the ressources that you need
$application->getBootstrap()->bootstrap(array('db', 'mail'));
$application->getBootstrap()->bootstrap(array('db', 'mail'))
行失败。我很困惑。它似乎能够访问frontController
模块,但db
或mail
模块都不起作用。任何想法可能是什么?
修改:以下是错误详情:
Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Resource matching "db" not found' in /usr/src/ZendFramework-1.12.3/library/Zend/Application/Bootstrap/BootstrapAbstract.php:694
Stack trace:
#0 /usr/src/ZendFramework-1.12.3/library/Zend/Application/Bootstrap/BootstrapAbstract.php(632): Zend_Application_Bootstrap_BootstrapAbstract->_executeResource('db')
#1 /usr/src/ZendFramework-1.12.3/library/Zend/Application/Bootstrap/BootstrapAbstract.php(586): Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap(Array)
#2 /www/.../live/htdocs/v2/cron/bootstrap.php(26): Zend_Application_Bootstrap_BootstrapAbstract->bootstrap(Array)
#3 /www/.../live/htdocs/v2/cron/send-leads.php(2): require_once('/www/...')
#4 {main}
thrown in /usr/src/ZendFramework-1.12.3/library/Zend/Application/Bootstrap/BootstrapAbstract.php on line 694
答案 0 :(得分:1)
更改
$application->getBootstrap()->bootstrap(array('db'))
到
$application->getBootstrap()->bootstrap(array('multidb'))
解决了这个问题。我不确定mail
资源,但是根据其他人遇到的类似问题判断,我想说它与你在/configs/application.ini文件中指定的资源有关
答案 1 :(得分:1)
你这样做是错误的。 在你的文件开头的cron脚本中。
// for testing on local host
//example: php script.php development
if($argv[1]){
putenv("APPLICATION_ENV=".$argv[1]);
}
else{
putenv("APPLICATION_ENV=live");
}
define("RUN_APP",true);
//put right path here!!!!
require ( dirname( $_SERVER["PHP_SELF"]) . "/../../../../public/index.php");
//your script code goes here
最后一个要求是你的公共zend文件夹中的索引文件。 使用此方法,您可以访问所有引导选项(自定义模型类,邮件选项等)。
我做了这一千次。
告诉我你是否遇到这个问题。