firebase - Firebase 函数 (Google Cloud) 上的 Puppeteer PDF 创建超时
问题描述
我在 Firebase 上有一个功能可以创建一个每次都会超时的 PDF 文件。为了调查这个问题,我添加了带有数字的调试日志。我运行的函数的源代码是:
const createPDF = async (html, outputPath) => {
console.log(1);
let pdf;
try {
console.log(2);
const browser = await puppeteer.launch();
console.log(3);
const page = await browser.newPage();
console.log(4);
await page.emulateMediaType('screen');
console.log(5);
await page.setContent(html, {
waitUntil: 'networkidle0'
});
console.log(6);
pdf = await page.pdf({
// path: outputPath,
format: 'A4',
printBackground: true,
margin: {
top: "50px",
bottom: "50px"
}
});
console.log(7);
await browser.close();
} catch (e) {
console.error(e);
}
console.log(8);
return pdf;
};
日志说:
10:58:12.490 AM 1
10:58:12.492 AM 2
10:58:16.469 AM 3
10:58:31.236 AM Function execution took 20003 ms, finished with status: 'timeout'
该脚本有效,当我在本地部署它时。我做错了什么?
解决方案
我认为launch
应该与 argument 一起使用{ args: ['--no-sandbox'] }
。我在这里找到了这种方法的例子。
我创建了结合提供的代码和 helloworld 云函数的测试,实际上总是以超时结束3
。但是,当我使用上述参数时,它开始正常工作。我用 256MiB 和 30 秒超时对其进行了测试。
工作代码:
const puppeteer = require('puppeteer');
exports.helloWorld = async (req, res) => {
console.log(2);
const browser = await puppeteer.launch({ args: ['--no-sandbox'] });
console.log(3);
const page = await browser.newPage();
console.log(4);
let message = req.query.message || req.body.message || 'Hello World!';
res.status(200).send(message);
};
推荐阅读
- xml - PowerShell 获取节点的第一行和关联的行号
- excel - 从输入框中搜索表格中的一个值并返回多个值
- java - 如何在 Recyclerview 列表中显示资产中的字符串数组?
- python - 使用 Anaconda 绑定构建 OpenCV 4.x (Linux)
- mongodb - Is there merit to adding flat properties additional to a duplicate nested
- python - 蒙特卡洛树搜索随机选择
- c# - Skiasharp 绘制矩形环绕位图
- java - 如何对从第一个字符开始的字符串数组进行排序?
- javascript - 根据用户的选择显示表格
- python - 为什么当我添加自变量时,我的 SciKit 线性回归表现更差(较低的 R 平方)?