0

ZF でSlmQueueBeanstalkdとを使用して PDF ファイルを作成するジョブ キューを実行しようとしています。」DOMPDFModule

これが私のコントローラーでやっていることです:

public function reporteAction()
{

    $job = new TareaReporte();
    $queueManager = $this->serviceLocator->get('SlmQueue\Queue\QueuePluginManager');
    $queue = $queueManager->get('myQueue');
    $queue->push($job);
    
    ...

}

これは仕事です:

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);
    }
}

1回目はファイルが作成され作業は成功しますが、2回目はタスクが埋もれてファイルが作成されません。

モデルを 2 回目にレンダリングしようとすると、エンドレス サイクルにとどまるようです。

4

1 に答える 1

0

同様の問題が発生しましたが、ZendPdf\PdfDocument がオブジェクト ファクトリを再利用する方法が原因であることが判明しました。ZendPdf\PdfDocument を使用していますか?

ファクトリを正しく閉じる必要がある場合があります。

class MyDocument extends PdfDocument
{
    public function __destruct()
    {
        $this->_objFactory->close();
    }
}

これまたは PdfDocument クラスに似たものを追加してみてください...

更新: PdfDocument を使用していないようですが、これは同じ問題であると思われます。通常の http リクエストで 2 番目の PDF を再生成できますか? 実行ごとに環境が同じであることを確認するのはあなたの仕事です。この問題を解決できない場合、SlmQueue の max_runs 設定を 1 に設定することが短期的な解決策となります。これにより、各ジョブの後にワーカーが停止し、バニラ状態にリセットされます...

于 2014-02-15T09:30:28.890 に答える