Сгенерированный PDF-файл, прикрепленный к электронному письму, не выполняется при использовании JOB и Supervisor

Привет всем,

Мой сценарий: у меня есть работа, которая отправляет электронное письмо с прикрепленным файлом 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([email protected], 'Tester');
        $message->subject('Subject Title');
        $message->to('[email protected]');
        $message->attachData($d['doc']->output(), 'test.pdf', ['mime' => 'application/pdf']);
    });
}
}

В методе контроллера я использовал:

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

Вышеупомянутое отлично работает на localhost. Однако на живом сервере он не работал. Кроме того, на сервере 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: Undefined index: SCRIPT_FILENAME in /ptesting/vendor/dompdf/dompdf/src/Css/Stylesheet.php:175

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

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

вы проверяли журналы laravel? (хранилище> журналы)

Saman Ahmadi 16.12.2018 23:30

да, и я ничего не видел

Deepesh Thapa 16.12.2018 23:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
345
1

Ответы 1

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

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

Mail::to([email protected])
  ->queue(new EmailTestPdf($data));

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

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

Я имею в виду, что это способ реализации domPDF. Он ищет какой-то URL-адрес сервера. и я не могу думать о том, чтобы понять это правильно

Deepesh Thapa 17.12.2018 00:07

Можете ли вы вставить трассировку ошибки? он должен быть на /home/coreso5/ptesting/storage/logs/worker.log. Какую версию dompdf вы используете? Можете ли вы показать код для этой строки: /ptesting/vendor/dompdf/dompdf/src/Css/Stylesheet.php:175

Diogo Gomes 17.12.2018 10:40

Статус: 500 Внутренняя ошибка сервера Cache-Control: no-cache, private date: Sun, 16 Dec 2018 12:33:25 GMT Content-type: text / html; charset = UTF-8 <! DOCTYPE html> <! - Symfony \ Component \ Debug \ Exception \ FatalErrorException: превышено максимальное время выполнения 30 секунд в файле / home / coreso5 / ptesting / vendor / laravel / framework / src / Illumina‌ te / Cache / FileStore.p‌ hp on line 49 Трассировка стека: 1. Symfony \ Component \ Debug \ Exception \ FatalErrorException- & gt; () / home / coreso5 / ptesting / vendor / laravel / framework / src / Illumina‌ te / Кэш / FileStore.p‌ hp: 49

Deepesh Thapa 18.12.2018 15:02
Maximum execution time of 30 seconds, вам нужно увеличить время max_execution, только для этого скрипта добавьте это в начало метода дескриптора set_time_limit(0); или глобально stackoverflow.com/questions/16171132/…
Diogo Gomes 19.12.2018 13:10

Спасибо за ответ. Но почему-то это произошло из-за неисправности супервизора обработки серверов. У меня самое высокое время исполнения.

Deepesh Thapa 19.12.2018 16:51

Другие вопросы по теме