使用Laravel-Sail基本上是一种在本地生成docker-compose.yml以拥有way服务器、MariaDB等的便捷方法,但当涉及到Browsershots的使用时,它会带来麻烦,这是提供Puppeteer的Laravel包。
在我开始之前
首先:当我扩展docker文件并重建镜像时,Puppeteer本身正在工作。
有什么问题吗?
我的pdf生成方法的这一部分将永远运行,并因超时而失败。
$view = view('pdf.user', compact('user'));
$body_html = $view->render();
return response()->streamDownload(function () use (
$body_html
) {
echo Browsershot::html($body_html)->format('A4')
->margins(0, 0, 0, 0)->showBackground()
->addChromiumArguments([
'font-render-hinting' => 'none',
])->noSandbox()->waitUntilNetworkIdle()->pdf();
});事实证明,刀片模板中的这一行导致了这个问题:
<img src="{{asset('images/logo.png')}}" class="h-24 w-24">在容器中使用tinker,我发现assets()帮助器返回
asset('images/logo.png')
> http://myapp.test/images/logo.png这很好。
如果我使用来自另一个URL (未停靠的)的随机图像,例如https://www.google.de/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png,视图可以正常加载和渲染。
所以我的问题是:这里的问题可能是什么,我如何解决它?
发布于 2021-07-12 05:54:09
我还没有答案,但我认为我在Laravel Sail中遇到了一个非常类似的问题,当我试图使用wkhtmltopdf生成PDF文件时。
从常用的sail配置中,它确实返回了一个PDF;不幸的是,任何外部链接的图像都是空的,因为无法从sail容器中使用站点的本地名称(tts.test)进行解析。
如果我将指向127.0.0.1的主机引用添加到容器的/etc/ tts.test文件中,那么资产现在在技术上是可解析的,但是该进程会挂起,直到超时。
非常奇怪的是,从ps -ef | grep wkhtmltopdf命令中,我可以看到挂起命令,包括它正在处理的临时HTML文件的位置,如果我从sail shell交互地运行相同的命令,它就会完美地生成PDF输出!!如果我发现了它挂起的原因,我会在这里发布更新。
https://stackoverflow.com/questions/67530081
复制相似问题