Cat*_*ine 6 php shell cron controller cakephp
几个月前我开始使用CakePHP(1.2)为公司的应用程序添加小功能,我对它不太熟悉.
在合并到生产服务器之前,我们在开发服务器上进行本地测试.
我希望每小时调用一个控制器动作,我认为通过我的研究,一个cron工作,我认为这是最好的方法.
尝试1
看完之后,
http://book.cakephp.org/1.2/en/view/110/Creating-Shells-Tasks
我可以实现没有错误的东西,但是没有执行动作.
根据这些示例,我在我的app目录(不是app/webroot)中添加了一个名为cron_dispatcher.php的文件,然后从app dir中执行了此命令
php cron_dispatcher.php/controller/action/param
当我通过url调用它时,它仍然没有发生任何事情,但它完美无缺.
尝试2
我尝试创建一个shell(email.php)来调用/ app/vendors/shells /中的操作.
<?php
class EmailShell extends Shell {
public function main() {
$this->out('Test');
}
}
?>
Run Code Online (Sandbox Code Playgroud)
这样就可以在控制台中成功输出Test
蛋糕邮件主要
但后来我找不到如何调用控制器的动作.我试过了
$这 - > requestAction( '/控制器/动作');
我还尝试从shell中的main函数进行调用.
我试图将控制器包含在$ uses变量中,就像我使用模型一样,但是没有用(并且我觉得这没有意义)
我不认为创建任务是解决方案,因为我不想复制sendEmails函数,因此我正在寻找一种方法来从shell或其他任何东西调用控制器的操作!
可能有一些我遗漏的理论,谢谢
解
我将一些方法从控制器移动到模型,我可以从shell调用它们.
App::import('Component', 'Email');
class SendMemosShell extends Shell {
var $uses = array(
'Memo',
);
public function main() {
}
public function sendEmails () {
$this->Email =& new EmailComponent(null);
$memoList = $this->Memo->getMemos();
//...
}
}
Run Code Online (Sandbox Code Playgroud)
这个链接有助于 http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html
编辑:澄清了一些信息并添加了解决方案
小智 3
其实这是一个很常见的问题,也遇到过。
控制器正在决定如何处理请求并启动该任务。在这种情况下,不需要控制器,因为您有一个 shell 任务,该任务已经很清楚了。
知道了这一点,调用控制器方法就没有意义了。
因此,重新考虑您的选择,是的,这是一个相当困难的选择。例如,您可能认为发送电子邮件是一个业务逻辑步骤,因此它应该位于模型中。另一种选择是将其完全分开(这是我们最喜欢的)。
在这种情况下,您将必须创建一个队列,将所有要发送的电子邮件放入其中。这是一个很好的设计,因为您知道控制器中的逻辑量会减少并且是分离的。这样您就可以获得电子邮件服务。
例如,您可以要求服务发送“新用户”邮件。然后将 User 对象添加到其中,它应该会自行处理。这样,您甚至可以扩展,因为您的服务可以外包,您可以在服务上扩展多个服务器等。
编辑:
好问题。
采取的步骤:
首先集中“发送电子邮件”流程。因此,选择一个放置位置。您可以决定:添加以将电子邮件发送到队列或直接调用服务。例如,您可以添加用于发送电子邮件的 shell 任务。
调用 shell: 现在调用 shell 时遇到问题。一般来说,你不想这样做。为什么不?因为一个shell(一个任务)可以运行很长时间。这就是我们在两者之间使用队列的原因。因此,您可以询问队列或让队列向您发送消息,告知您某事已完成。例如,考虑一个已关闭的邮件服务器。您必须重试等。这不应该出现在网络请求中,因为用户正在等待响应。
第三步是从 cron 调用 shell,现在这很容易,因为您已经在命令行上,所以您可以使用标准调用。
无论如何,有一些选项可以从控制器进行直接调用,但您不应该这样做。这篇文章提供了一些非常有趣的见解: CakePHP:从控制器运行 shell 作业
编辑 31/08/'13:请参阅 CakePHP 的事件系统以获取一些示例:http://book.cakephp.org/2.0/en/core-libraries/events.html
归档时间: |
|
查看次数: |
8949 次 |
最近记录: |