生产环境中Spatie Laravel-PDF(依赖Browsershot)生成PDF失败的排查求助
我在项目中使用 Spatie 的 Laravel-PDF 包生成 PDF,它底层依赖 Browsershot 实现功能。本地测试一切正常,但部署到生产服务器后就报错,而且错误信息几乎没有提供有用的排查线索,实在卡壳了。
先说明目前确认的正常项:
- 临时生成的
index.html文件内容完全符合预期,没有缺失 - 已经将 Node.js 的路径添加到系统环境变量中,路径配置没问题
以下是我遇到的具体错误输出:
The command
"node C:\inetpub\wwwroot\myproject\vendor\spatie\browsershot\src/../bin/browser.cjs "{\"url\":\"file://C:\Windows\TEMP\607378296-0455840001752189861\index.html\",\"action\":\"pdf\",\"options\":{\"args\":[],\"viewport\":{\"width\":800,\"height\":600},\"displayHeaderFooter\":false,\"margin\":{\"top\":\"0.25in\",\"right\":\"0.25in\",\"bottom\":\"0.25in\",\"left\":\"0.25in\"},\"format\":\"letter\",\"landscape\":true,\"printBackground\":true}}"failed. Exit Code: 1(General error)
Working directory: C:\inetpub\wwwroot\myproject\public
Output: ================
Error Output: ================
我的控制器生成PDF的代码如下:
<?php namespace App\Http\Controllers; use Spatie\LaravelPdf\Enums\Format; use Spatie\LaravelPdf\Enums\Unit; use Spatie\LaravelPdf\Facades\Pdf; class ExportController extends Controller { public function pdf() { $pdf = Pdf::view('table-pdf'); return $pdf->format(Format::Letter) ->margins(0.25, 0.25, 0.25, 0.25, Unit::Inch) ->landscape() ->name("myfile.pdf"); } }
我已经尝试过这些排查手段,但都没有解决问题:
- 通过
withBrowserShot()链式调用setNodeBinary()手动指定 Node 二进制文件路径,无效 - 调用
noSandbox()关闭沙箱模式,没有改善 - 卸载并重新安装 Puppeteer,问题依旧
有没有大佬能指点下,我应该从哪些方向继续排查?实在是找不到突破口了...
内容来源于stack exchange

