【发布时间】:2019-07-10 19:55:59
【问题描述】:
我正在使用 Apify 作为 Google Cloud Functions 部署一些代码。触发后,云函数会静默终止。我做错了什么?
我有一些使用 Apify 0.15.1 的工作代码。它在本地运行良好。一旦部署为谷歌云功能,它会静默失败,没有任何明显的错误。使用 Puppeteer 1.18.1 的等效代码可以正常工作。
我已经使用下面更简单的代码重现了该问题。虽然此示例并不严格要求 Apify,但我希望能够使用 Apify 提供的额外功能。
使用 Apify 的代码:
const Apify = require("apify");
exports.screenshotApify = async (req, res) => {
let imageBuffer;
Apify.main(async () => {
const browser = await Apify.launchPuppeteer({ headless: true });
const page = await browser.newPage();
await page.goto("https://xenaccounting.com");
imageBuffer = await page.screenshot({ fullPage: true });
await browser.close();
});
if (res) {
res.set("Content-Type", "image/png");
res.send(imageBuffer);
}
return imageBuffer;
};
使用 Puppeteer 的代码:
const puppeteer = require("puppeteer");
exports.screenshotPup = async (req, res) => {
const browser = await puppeteer.launch({ args: ["--no-sandbox"] });
const page = await browser.newPage();
await page.goto("https://xenaccounting.com");
const imageBuffer = await page.screenshot({ fullpage: true });
await browser.close();
if (res) {
res.set("Content-Type", "image/png");
res.send(imageBuffer);
}
return imageBuffer;
};
一旦部署为 Google Cloud 函数(使用 --trigger-http 和 --memory=2048),Puppeteer 变体工作正常,而 Apify 变体静默终止,没有结果(除了“ok”/HTTP 200 返回值)。
【问题讨论】:
-
请注意,我知道
if (res) /* ... */ return /* ... */对于 Google Cloud Functions 来说是不必要的。这只是我在本地测试导出函数的一种快速方法。 -
在您的云函数定义中,您的 package.json 包含什么?我的目标是重新创建您的问题,看看我的项目会发生什么。
-
Apify.main 返回什么?我怀疑它是在等待所有工作完成后再继续。
-
@Kolban 唯一的依赖是
apify。其他一切都是npm init的默认值。 -
@DougStevenson 你是对的。
标签: javascript google-cloud-functions apify