Empecé a usar CakePHP (1.2) hace unos meses para agregar pequeñas características a la aplicación de la compañía y no estoy muy familiarizado con ella.Tortphp cron job para llamar a la acción de un controlador
Probamos localmente y luego en un servidor de desarrollo antes de fusionarlo con un servidor de producción.
Quiero que se llame una acción de controlador cada hora con lo que supuse que era la mejor manera de hacerlo a través de mis investigaciones, un trabajo de cron.
Intento 1
Después de leer estos,
http://book.cakephp.org/1.2/en/view/110/Creating-Shells-Tasks
pude poner en práctica algo sin errores, pero no se ejecuta la acción.
Sobre la base de estos ejemplos, he añadido un llamado cron_dispatcher.php archivo en mi directorio de aplicación (no aplicación/web raíz) y luego se hicieron a este comando desde el directorio de aplicación
php cron_dispatcher.php/controlador/acción/param
Todavía no pasó nada, pero funciona perfecto cuando lo llamo a través de la url.
Intento 2
I intentado crear una concha (email.php) que llame a la acción en/app/vendedores/conchas /.
<?php
class EmailShell extends Shell {
public function main() {
$this->out('Test');
}
}
?>
Esto da salida a prueba con éxito en la consola utilizando el correo electrónico
torta principal
pero entonces no puedo encontrar cómo llamar a la acción del controlador. Lo intenté
$ this-> requestAction ('/ controller/action');
También he intentado hacer la llamada desde una función diferente a la principal en el shell.
He tratado de incluir el controlador en el $ utiliza variable como lo haría con un modelo, pero eso no funcionó (y que no tiene sentido creo)
No creo que la creación de una la tarea es la solución, ya que no quiero duplicar la función sendEmails, ¡por eso estoy buscando una forma de llamar la acción del controlador desde un shell o lo que sea!
Es probable que haya alguna teoría que me falta, gracias
Solución
me trasladaron algunos métodos desde el controlador a un modelo y que era capaz de llamar desde un 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();
//...
}
}
Este enlace ayudó http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html
edición: aclaró algunas de las informaciones y ha añadido la solución
Necesito poder llamar esta acción manualmente también (haciendo clic en un botón en la vista, por ejemplo). ¿Sugiere que cree una tarea en lugar de una acción de controlador y llamé a esto en su lugar (de forma automática con un trabajo cron y manualmente al hacer clic)? ¿Es un caparazón algo que llamas totalmente separado de la lógica o estabas hablando de la cola? A veces tengo que enviar múltiples correos electrónicos a la vez (cuando se marca automáticamente) pero no debería ocurrir muy a menudo, así que me pregunto si la cola es demasiado compleja para mis necesidades. Gracias por su respuesta – Catherine
También les respondí, en general, debería pensar en el tamaño de su aplicación y su diseño. La forma en que respondí tu pregunta es una de las formas en que debería hacerse. No significa que es el camino que es bueno para los negocios. Si solo envía un correo a veces, tal vez no valga la pena crear una configuración completa y más compleja para él. –
Hola de nuevo, gracias por su respuesta detallada. Acordamos que no había necesidad de enviar correos electrónicos manualmente, así que creé un shell que envía los correos electrónicos. También me obligó a mover más métodos del controlador al modelo, que es más apropiado si lo entendí bien. Luego seguí este procedimiento para configurar el trabajo cron: http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html Decidí no utilizar las colas, aunque esto parecía interesante porque no valió la pena en este caso! – Catherine