Yii 在使用我的工作时使用铁匠

Yii 在使用我的工作时使用铁匠,yii,cron,amazon-elastic-beanstalk,iron.io,ironworker,Yii,Cron,Amazon Elastic Beanstalk,Iron.io,Ironworker,我的网站位于AWS Elastic Beanstalk(PHP)上。我使用Yii框架作为MVC 不久前,我想每天运行一个SQL查询。我研究了如何在Beanstalk上运行Cron,合并云和Cron的概念似乎很复杂。我遇到了Iron Worker(),并设法创建了一个目前工作正常的Worker 今天,我想运行一个更复杂的cron(在我的数据库中查找通知,决定是否发送电子邮件,构建电子邮件模板并发送电子邮件(通过AWS SES) 据我所知,工作者文件应该是自包含的项目,包含工作所需的一切。 然而,我

我的网站位于AWS Elastic Beanstalk(PHP)上。我使用Yii框架作为MVC

不久前,我想每天运行一个SQL查询。我研究了如何在Beanstalk上运行Cron,合并云和Cron的概念似乎很复杂。我遇到了Iron Worker(),并设法创建了一个目前工作正常的Worker

今天,我想运行一个更复杂的cron(在我的数据库中查找通知,决定是否发送电子邮件,构建电子邮件模板并发送电子邮件(通过AWS SES)

据我所知,工作者文件应该是自包含的项目,包含工作所需的一切。 然而,我在构建我的MVC上投入了大量的时间和精力。我有复杂的模型、验证、电子邮件模板引擎等等。。。 似乎很难使用我所做的工作来创建一个钢铁工人。即使我成功地将我所有的代码移植到一个工人(这似乎是一个很大的工作),这意味着无论何时我对我的主代码进行更改,我都需要确保工人也有这些更改。这意味着我将有一个“分支”如果我想在未来创造更多的员工,那就更是如此


正确的方法是什么?

短期内,您可能只需要使用IronWorker中的调度功能,让该工作程序在应用程序中命中一个端点。然后,该端点将触发在应用程序环境中运行的操作

从长远来看,我们确实建议您更多地关注面向服务的方法,通过这种方法,您可以将应用程序分解为更松散耦合和分布式的。这里有一篇关于这个主题的文章。其优点很多,特别是在可伸缩性和开发灵活性方面

你也可以看看这个YII的添加

当然,你不希望不必要地重写你的应用程序,但你可以在某些方面寻求解耦。建议创建一个worker目录,并努力将worker编写为自包含的。这样,你可以在不同的环境中运行它们,只需将有效负载传递给worker即可。(推送队列也可用于推送这些工作人员。)一旦您习惯了分布式异步处理,这是一个非常容易管理的过程

(注:我在Iron.io工作)