Кукольник не может бежать на героку

Я развернул приложение на heroku и добавил buildpack кукольника Heroku.

После успешного повторного развертывания я пытаюсь запустить его, и он терпит неудачу. Используя heroku logs -t, я получаю это сообщение об ошибке:

2018-09-07T13:16:10.870497+00:00 app[web.1]: Error: Failed to launch chrome!
2018-09-07T13:16:10.870512+00:00 app[web.1]: [0907/131610.045486:FATAL:zygote_ho
st_impl_linux.cc(116)] No usable sandbox! Update your kernel or see https://chro
mium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox_development.
md for more information on developing with the SUID sandbox. If you want to live
 dangerously and need an immediate workaround, you can try using --no-sandbox.
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
26
0
14 619
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы должны решить эту проблему, передав флаги --no-sandbox и --disable-setuid-sandbox в puppeteer.launch():

const browser = await puppeteer.launch({
  args: [
    '--no-sandbox',
    '--disable-setuid-sandbox',
  ],
});

Если это не сработает, вы можете прочитать официальное руководство по устранению неполадок Puppeteer: Запуск кукловода на Heroku.

Установка сборки https://github.com/jontewks/puppeteer-heroku-buildpack на Heroku решила проблему.

Eugene Karataev 23.04.2020 10:15

Вот что у меня сработало. Сначала я очищаю все свои пакеты сборки, а затем добавляю пакеты puppeteer-heroku-buildpack и heroku / nodejs:

$ heroku buildpacks:clear
$ heroku buildpacks:add --index 1 https://github.com/jontewks/puppeteer-heroku-buildpack
$ heroku buildpacks:add --index 1 heroku/nodejs

Затем добавьте следующие аргументы в функцию запуска кукольника:

const browser = await puppeteer.launch({
  'args' : [
    '--no-sandbox',
    '--disable-setuid-sandbox'
  ]
});

Наконец, разверните его обратно в Heroku:

$ git add .
$ git commit -m "Fixing deployment issue"
$ git push heroku master
elements.heroku.com/buildpacks/jontewks/…
Nicolai Weitkemper 22.08.2020 16:33

Работает как шарм

Gaurav Rai 16.09.2020 09:37

работает ли это на dockerized образе, перенесенном на heroku? Нужно ли мне устанавливать пакеты сборки?

The.Wolfgang.Grimmer 27.11.2020 13:20

Этот ответ - это фантастика, но в интересах минимального, работоспособного примера я решил поделиться своим полным кодом и рабочим процессом для начала работы с веб-приложением на основе Puppeteer.

См. В этот ответ простой планировщик и версию процесса часов (хотя все три подхода могут сосуществовать в одном приложении, не делая ничего особенного).

package.json:

{
  "name": "test-puppeteer",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "puppeteer": "^9.1.1"
  }
}

Procfile:

web: node index.js

index.js:

const express = require("express");
const puppeteer = require("puppeteer");

const app = express();
app.set("port", process.env.PORT || 5000);

const browserP = puppeteer.launch({
  args: ["--no-sandbox", "--disable-setuid-sandbox"]
});

app.get("/", (req, res) => {
  // FIXME move to a worker task; see https://devcenter.heroku.com/articles/node-redis-workers
  let page;
  (async () => {
    page = await (await browserP).newPage();
    await page.setContent(`<p>web running at ${Date()}</p>`);
    res.send(await page.content());
  })()
    .catch(err => res.sendStatus(500))
    .finally(async () => await page.close())
  ;
});

app.listen(app.get("port"), () => 
  console.info("app running on port", app.get("port"))
);

Настраивать

  1. Установите Heroku CLI и создайте новое приложение с пакетами сборки Node и Puppeteer (см. этот ответ):

    heroku create
    heroku buildpacks:add --index 1 https://github.com/jontewks/puppeteer-heroku-buildpack -a cryptic-dawn-48835
    heroku buildpacks:add --index 1 heroku/nodejs -a cryptic-dawn-48835
    

    (замените cryptic-dawn-48835 на имя вашего приложения)

  2. Развертывать:

    git init
    git add .
    git commit -m "initial commit"
    heroku git:remote -a cryptic-dawn-48835
    git push heroku master
    
  3. Убедитесь, что он работал с curl https://cryptic-dawn-48835.herokuapp.com. Вы должны увидеть что-то вроде

    <html><head></head><body><p>web running at Wed May 19 2021 02:12:48 GMT+0000 (Coordinated Universal Time)</p></body></html>
    

Другие вопросы по теме