如何解决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
应该与参数 { args: ['--no-sandbox'] }
一起使用。我找到了这种方法的示例 here。
我创建了结合提供的代码和 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);
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。