Созданный PDF-файл, прикрепленный к электронной почте, не работает при использовании JOB и Supervisor. - PullRequest
0 голосов
/ 17 декабря 2018

Привет всем,

Мой сценарий: у меня есть работа, которая отправляет электронное письмо вместе с приложенным PDF-файлом.PDF создается в дескрипторе задания () и прикрепляется к письму.Чтобы сделать работу с пользователем более удобной, я использовал очередь для отправки электронной почты.Итак, все остальные электронные письма работают нормально, кроме случаев, когда я генерирую PDF: loadView.Кроме того, PDF отлично работает на локальном хосте (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));

Вышеописанное прекрасно работает на 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-файла он выдаст ошибку, которую я обнаружил в таблице failed_jobs

ErrorException: неопределенный индекс: SCRIPT_FILENAME в /ptesting/vendor/dompdf/dompdf/src/Css/Stylesheet.php:175

...............

Подсветка \ Foundation \ Bootstrap \ HandleExceptions-> handleError (8, 'Неопределенный индекс ...', '/ ptesting / v ...', 175, Array)

1 Ответ

0 голосов
/ 17 декабря 2018

Если ваша работа отправляет только электронное письмо, и вы не собираетесь использовать его в другом месте, вам не нужно создавать специальное задание, laravel может поставить вашу электронную почту в очередь.

Очередь почты

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

Что касается вашей ошибки, похоже, проблема возникает при создании PDF.Вы уверены, что это работает за пределами этой работы?что происходит, когда вы делаете;

$d['doc']->output();
...