Heroku 上的 Puppeteer pdf 空白
Puppeteer pdf blank on Heroku
我正在我的网络应用程序中制作一条路线,将一些 html 转换为 pdf。这在开发中效果很好,但在 Heroku 上失败了。其他 Puppeteer 任务在 heroku 上运行良好。我渲染的 HTML 很小。
const generatePDF = asyncMiddleware(async (req, res) => {
const browser = await puppeteer.launch({
dumpio: true,
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
page.on('error', err => {
console.error('err', err, err.stack)
browser.close();
});
await page.goto(`data:text/html,${req.body.html}`, {
waitUntil: 'networkidle2',
});
// stupid attempt at debugging, making sure page has time to render?
await page.waitFor(6000);
const pdf = await page.pdf();
res.set('content-type', 'application/pdf');
await browser.close();
res.send(pdf);
});
module.exports = require('express')
.Router()
.post('/', generatePDF)
当我在 Heroku 上点击路线时,我得到一个空白的 PDF。 Puppeteer 产生以下标准输出
[0131/123556.374089:ERROR:gpu_process_transport_factory.cc(1043)] Lost UI shared context.
当我写这段代码时,我使用的是版本 0.10.x,但我认为升级可能会有帮助,所以我升级到 1.0.0。问题在两个版本上都存在。节点版本为 8.x.x
我认为这可能是服务器内存问题,所以我升级到 2x dyno,但这没有帮助。
我认为这可能与以下两个问题之一有关:
- https://github.com/GoogleChrome/puppeteer/issues/1875
- https://github.com/GoogleChrome/puppeteer/issues/1925
但是,这些似乎与 Heroku 没有超级关系,或者解释它在一个环境中而不是另一个环境中如何工作
更新:当我查看有效负载时,pdf 的数据看起来像一个 UUID!
我想通了!我服务器的客户端是 axios。我需要告诉 axios 我正在提供二进制文件。
const { data: pdf } = await req({
method: 'post',
url: 'api/pdfs',
responseType: 'arraybuffer', // <-- this was missing
data: { html }
});
我正在我的网络应用程序中制作一条路线,将一些 html 转换为 pdf。这在开发中效果很好,但在 Heroku 上失败了。其他 Puppeteer 任务在 heroku 上运行良好。我渲染的 HTML 很小。
const generatePDF = asyncMiddleware(async (req, res) => {
const browser = await puppeteer.launch({
dumpio: true,
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
page.on('error', err => {
console.error('err', err, err.stack)
browser.close();
});
await page.goto(`data:text/html,${req.body.html}`, {
waitUntil: 'networkidle2',
});
// stupid attempt at debugging, making sure page has time to render?
await page.waitFor(6000);
const pdf = await page.pdf();
res.set('content-type', 'application/pdf');
await browser.close();
res.send(pdf);
});
module.exports = require('express')
.Router()
.post('/', generatePDF)
当我在 Heroku 上点击路线时,我得到一个空白的 PDF。 Puppeteer 产生以下标准输出
[0131/123556.374089:ERROR:gpu_process_transport_factory.cc(1043)] Lost UI shared context.
当我写这段代码时,我使用的是版本 0.10.x,但我认为升级可能会有帮助,所以我升级到 1.0.0。问题在两个版本上都存在。节点版本为 8.x.x
我认为这可能是服务器内存问题,所以我升级到 2x dyno,但这没有帮助。
我认为这可能与以下两个问题之一有关: - https://github.com/GoogleChrome/puppeteer/issues/1875 - https://github.com/GoogleChrome/puppeteer/issues/1925
但是,这些似乎与 Heroku 没有超级关系,或者解释它在一个环境中而不是另一个环境中如何工作
更新:当我查看有效负载时,pdf 的数据看起来像一个 UUID!
我想通了!我服务器的客户端是 axios。我需要告诉 axios 我正在提供二进制文件。
const { data: pdf } = await req({
method: 'post',
url: 'api/pdfs',
responseType: 'arraybuffer', // <-- this was missing
data: { html }
});