Как использовать Apify в облачных функциях Google - PullRequest
0 голосов
/ 10 июля 2019

Я развертываю некоторый код, используя Apify в качестве облачных функций Google. При срабатывании облачная функция завершается беззвучно. Что я делаю не так?

У меня есть рабочий код, использующий Apify 0.15.1. Локально работает. После развертывания в качестве облачной функции Google происходит сбой без каких-либо явных ошибок. Эквивалентный код, использующий 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;
};

Код с использованием кукловода:

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 (с --trigger-http и --memory = 2048) вариант Puppeteer работает нормально, тогда как вариант Apify завершается без вывода сообщений без результата (за исключением возврата 'ok' / HTTP 200). значение).

1 Ответ

1 голос
/ 11 июля 2019

Избавьтесь от функции Apify.main(), она планирует вызов на более позднее время, после того как ваша функция уже вернула результат.

...