邮件队列和DOMPDF作业在宅基地上完美运行,但在我的生产服务器上运行不正常

问题描述 投票:2回答:1

最新5.1 Laravel 5.1.27最新的dompdf 0.6.2

所以我有一个电子邮件,附上生成的PDF,排队等候。

在宅基地上进行测试,手工与工匠:工作和艺术:听,一切运作良好,我收到的电子邮件与附加的PDF完美。

只有在我的生产服务器中,具有相同的参数,至少我能看到的,不起作用!!

如果与Mail :: send同步,它都可以工作

当更新到Mail:队列时,我得到工作卡住了,在生产中我有工匠的主管:listen --tries = 10并且它失败了,并移动到failed_jobs表。

如果没有PDF附件,Aah,mail :: queue工作得很好

因此,我可以将其归结为DOMPDF抛出的异常,仅在生产中并且仅在排队的作业中!

exception 'ErrorException' with message 'Undefined index: SCRIPT_FILENAME' in /home/myapp_name/vendor/dompdf/dompdf/include/stylesheet.cls.php:147

所以stylesheet.cls.php:147上的这一行是

list($this->_protocol, $this->_base_host, $this->_base_path) = explode_url($_SERVER["SCRIPT_FILENAME"]);

所以归结为CLI(命令行界面),没有定义这个$ _SERVER [“SCRIPT_FILENAME”] !!

沿着这条路走所有这一切都是有意义的,但为什么在宅基地处理工作时,它也能完美地工作?

希望我有意义!!队列代码

$data = [bla bla bla]; // this $data is for the blade render, and is different from the one used in the Closure, for the PDF, i know =)
    Mail::queue('emails.default', $data , function($message) use ($destinatarios, $user_spo_full_name, $spare_part_order, $spare_parts_order_list)
    {
        $message->to($destinatarios);
        $message->subject('Spare Part Order Confirmation - Your ref: ' . $spare_part_order->client_reference );

        $data =
            [
                'user_full_name' => $user_spo_full_name,
                'spare_part_order' => $spare_part_order,
                'spare_parts_order_list' => $spare_parts_order_list
            ];
        $pdf = PDF::loadView('spareparts.sparepartsorder.pdf.spare-part-order', compact('data'));
        $message->attachData($pdf->output(), 'SP_'.$spare_part_order->client_reference . '.pdf' );

    });

在此先感谢任何帮助和新年快乐!

laravel laravel-5.1
1个回答
3
投票

得到它了!!

在生产服务器上,有一个队列:监听进程与supervisor一起运行。

这就是它,当我们进入服务器时,如果我们运行php -i,我们可以看到$ _SERVER变量被加载,即使是空白。

当php命令通过supervisor运行时,没有$ _SERVER变量。

因此,在主管处理的队列中使DOMPDF工作的解决方案是解决代码问题。如果你通过作曲家获得它,就像我一样,这将是一个痛苦,分析存储库,并在composer.json中更改源代码。

然后,我们所要做的就是处理日志,直到满足所有环境变量

if (!issset($_SERVER["SCRIPT_FILENAME"])) $_SERVER["SCRIPT_FILENAME"] = "";

这将使它工作,就像在通过SSH运行时那样,它是如何加载变量的,空的!

希望这有助于任何人!!

© www.soinside.com 2019 - 2024. All rights reserved.