2015-12-30 73 views
1

最新5.1 Laravel 5.1.27 最新DOMPDF在0.6.2郵件隊列和DOMPDF工作完美的作品上宅基地,但不是我的生產服務器

所以我有一封電子郵件,該附加一個生成的PDF,即排隊。

在宅基地上進行測試,無論是手工還是工匠:工作和藝術家:聽,這一切都運行良好,我用附帶的PDF完美地收到了電子郵件。

只有在我的生產服務器上,它具有相同的參數,至少對於我所能看到的,不起作用!如果

的所有作品,同步使用郵件發送::

當更新郵件:隊列,我得到的工作卡,對生產我有工匠導師:聽--tries = 10,它得到失敗,並轉移到failed_jobs表。

啊哈,郵件::隊列workes完美若無PDF附件

,所以我可以釘下來到由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「]定義!

一切都將有利於沿着這條道路走下去,但爲什麼當宅基地,也是在CLI的工作處理工作完美時,它會工作得很好?

希望我有道理! 代碼隊列

$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'); 

    }); 

提前任何幫助的感謝和新年快樂!一切

+0

你可以發佈你的composer.json文件嗎?如果你在require-dev下寫下它們,這可能是問題所在。 –

+0

當然,現在不在工作,但我想是沒有任何關於需要開發包的東西,因爲所有的作品,只要將Mail :: queue更改爲Mail :: send ....當然這會使它同步運行,並且再延長10倍(發送電子郵件)! – iboinas

+0

如果它在一臺服務器上工作,但不在另一臺服務器上,那麼這可能是兩者之間的配置差異。有些事情要看:環境變量,'.env'文件,'composer.json',你的Laravel配置文件,任何軟件包的配置文件(也許你忘了發佈一個?) – Kryten

回答

2

明白了!

在生產服務器上,存在隊列:監聽進程正在運行。

所以就這樣,當我們進入服務器,如果我們運行php -i,我們可以看到$ _SERVER變量被加載,即使是空白的。

當php命令通過supervisor運行時,沒有$ _SERVER變量。

因此,解決方案讓DOMPDF在主管處理的隊列中工作,就是解決代碼問題。如果你是通過作曲家創作的,就像我一樣,這將是一個痛苦,分叉庫,並改變composer.json的來源

然後,我們所要做的就是處理日誌,直到滿足所有environemnt變量,通過

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

這將使其工作,因爲它通過SSH運行時,這就是它如何加載變量,空!

希望這可以幫助任何人!

+0

是的,這個工程,最新dompdf/dompdf的版本我只需要更新Css/Stylesheet.php文件,它的工作原理。謝謝 – Davor

+0

很高興幫助! – iboinas

相關問題