【问题标题】:How to use Apify on Google Cloud Functions如何在 Google Cloud Functions 上使用 Apify
【发布时间】: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


【解决方案1】:

去掉Apify.main() 函数,它将调用安排到稍后的时间,在你的函数已经返回结果之后。

【讨论】:

  • 确实有效。 Apify.main() 的参数必须返回 Promise 才能等待它解析。谢谢!
  • 哼。 ? 但是它不应该也等待async 函数吗?文档提到main 会等待,但不会。
  • Apify.main() 应该只在独立程序中使用,而不是像你的情况那样在服务器路由中使用。如果在独立程序中使用,则没有必要等待 Apify.main()
  • 知道了。我的后续问题是:为什么? (即 Apify.main 中的原因)
  • 详情请参阅Apify.main() 文档sdk.apify.com/docs/api/apify#apifymainuserfunc
猜你喜欢
  • 2021-12-26
  • 2019-06-12
  • 1970-01-01
  • 2017-10-03
  • 2020-11-03
  • 2019-05-14
  • 1970-01-01
  • 2023-03-28
  • 2019-08-14
相关资源
最近更新 更多