使用JOB和Supervisor时,附加到电子邮件的生成的PDF失败。

时间:2018-12-16 21:28:23

标签: php laravel dompdf

大家好,

我的情况:我有一份工作,可以发送电子邮件和附带的pdf。 pdf是在job handle()中生成的,并随附在电子邮件中。为了使用户体验更加友好,我使用队列作业发送电子邮件。因此,所有其他电子邮件都可以正常工作,除非生成PDF:loadView。此外,PDF在本地主机(WAMP)上运行正常,但是,它引发了上述异常,并位于数据库的fail_jobs表中。

我的工作示例Class :: EmailTestPdf

class EmailTestPdf implements ShouldQueue
{ 
    protected $data;
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

public function __construct(array $data)
{
    $this->data = $data;
}

public function handle()
{
    $d=$this->data;
    $d['doc'] = PDF::loadView('email.test',compact('data','survey')); 
    Mail::send('email.testpdf', $d, function ($message) use ($d)
    {
        $message->from(abc@gmail.com, 'Tester');
        $message->subject('Subject Title');
        $message->to('me@gmail.com');
        $message->attachData($d['doc']->output(), 'test.pdf', ['mime' => 'application/pdf']);
    });
}
}

在我使用的控制器方法上:

 EmailTestPdf::dispatch($data)->delay(now()->addSeconds(5));

以上在localhost上正常工作。但是,它不能在实时服务器上工作。 另外,在centOS服务器上,我实现了 supervisor ,如下所示:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/coreso5/ptesting/artisan queue:work database --sleep=3 --
tries=3
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=/home/coreso5/ptesting/storage/logs/worker.log

运行发送pdf的测试后,它将引发我在fail_jobs表中发现的错误

  

ErrorException:未定义的索引:/ptesting/vendor/dompdf/dompdf/src/Css/Stylesheet.php:175

中的SCRIPT_FILENAME

......

  

Illuminate \ Foundation \ Bootstrap \ HandleExceptions-> handleError(8,'Undefined index ...','/ ptesting / v ...',175,Array)

1 个答案:

答案 0 :(得分:0)

如果您的工作仅发送电子邮件,并且您不想在其他地方使用它,则无需创建专门的工作,laravel可以将您的电子邮件排队。

Queueing-mail

update purchase
set purchase_date=product.production_date
from product
where purchase.purchase_date<product.production_date;

关于您的错误,似乎在创建pdf时出现问题。您确定它在这项工作之外有效吗?当您这样做时会发生什么;

Mail::to(abc@gmail.com)
  ->queue(new EmailTestPdf($data));