我正在尝试运行作业队列,使用ZF中的SlmQueueBeanstalkd
和DOMPDFModule
来创建PDF文件。
Estoy tratando de correr una tarea para crear un archivo PDF usando SlmQueueBeanstalkd
和DOMPDFModule
en ZF2。
这是我在控制器中所做的事情:
Esto es lo que estoy haciendo en el controlador:
...
public function reporteAction()
{
$job = new TareaReporte();
$queueManager = $this->serviceLocator->get('SlmQueue\Queue\QueuePluginManager');
$queue = $queueManager->get('myQueue');
$queue->push($job);
...
}
这是工作:
Esta es la tarea:
namespace Application\Job;
use SlmQueue\Job\AbstractJob;
use SlmQueue\Queue\QueueAwareInterface;
use SlmQueue\Queue\QueueInterface;
use DOMPDFModule\View\Model\PdfModel;
class TareaReporte extends AbstractJob implements QueueAwareInterface
{
protected $queue;
public function getQueue()
{
return $this->queue;
}
public function setQueue(QueueInterface $queue)
{
$this->queue = $queue;
}
public function execute()
{
$sm = $this->getQueue()->getJobPluginManager()->getServiceLocator();
$empresaTable = $sm->get('Application\Model\EmpresaTable');
$registros = $empresaTable->listadoCompleto();
$model = new PdfModel(array('registros' => $registros));
$model->setOption('paperSize', 'letter');
$model->setOption('paperOrientation', 'portrait');
$model->setTemplate('empresa/reporte-pdf');
$output = $sm->get('viewPdfrenderer')->render($model);
$filename = "/path/to/pdf/file.pdf";
file_put_contents($filename, $output);
}
}
第一次运行时,会创建文件并且工作成功,但是,如果再次运行,则会隐藏任务并且不会创建文件。
在尝试第二次渲染模型时,似乎仍处于无休止的循环中。
我很感激你可以帮助我。
谢谢。
La primera vez que se ejecuta,el archivo es creado y el trabajo es exitoso,sin embargo,si se ejecuta una segunda vez,la tarea queda enterrada y el archivo no se crea。
Parece que se queda en un ciclo interminable cuando trata de renderizar el modelo la segunda vez。
Apreciaríaomeoque me puedan ayudar。
格拉西亚斯。
答案 0 :(得分:0)
我遇到过类似的问题,结果证明这是因为ZendPdf \ PdfDocument重用了它的对象工厂。你在使用ZendPdf \ PdfDocument吗?
您可能需要正确关闭工厂。
class MyDocument extends PdfDocument
{
public function __destruct()
{
$this->_objFactory->close();
}
}
尝试添加此类或类似于PdfDocument类的内容......
更新:看来你没有使用PdfDocument,但是我怀疑这个问题是一样的。您是否能够在正常的http请求中重新生成第二个PDF?确保每次运行时环境相同是您的工作。 如果您无法解决此问题,短期快速解决方案是将SlmQueue的max_runs配置设置为1.这样,工作程序在每个作业后停止并重置为vanilla状态......