php - 使用 JOB 和 Supervisor 时生成的附加到电子邮件的 PDF 失败。
问题描述
大家好,
我的场景:我有一份工作,它发送一封电子邮件并附上一个 pdf。pdf 在作业句柄()中生成并附在电子邮件中。为了让用户体验更友好,我使用队列作业来发送电子邮件。因此,除了我生成 PDF:loadView 时,所有其他电子邮件都可以正常工作。此外,PDF 在 localhost (WAMP) 上工作得很好但是,它会引发上述异常并位于数据库的 failed_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));
以上在本地主机上工作正常。但是,它在实时服务器上不起作用。此外,在 centOS 服务器上,我实现了如下管理程序:
[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 的测试后,它会抛出我在 failed_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)
解决方案
如果您的工作只是发送一封电子邮件,并且您不打算在其他地方使用它,您不需要创建专门的工作,laravel 可以将您的电子邮件排队。
Mail::to(abc@gmail.com)
->queue(new EmailTestPdf($data));
关于您的错误,创建pdf时似乎正在发生问题。你确定它在这份工作之外有效吗?当你这样做时会发生什么;
$d['doc']->output();
推荐阅读
- c++ - zlib 将膨胀一个流,但在 <> 中编码的文本将保持为十六进制形式
- python - 无法在同一文件夹中导入模块
- angular - 在 Windows 10 上安装 angular-cli 时出错
- php - 根据在商店 woocommerce 中的总花费自动申请优惠券
- python - Pandas 以特定顺序快速检索数据
- php - 在找到的数字前面添加文本,字符串操作
- java - 我可以根据某些条件创建一个新课程吗
- perl - Perl:如何从 md5::digest addfile() 获取“字节读取”?
- hyperledger-fabric - 如何在 IBM Cloud Functions 操作中使用 Hyperledger Fabric 节点 SDK 包?
- mongodb - 从自联接计算移动平均线