Ошибка при отправке приложения Google Chrome Puppeteer в Predix
Я пытаюсь использовать Google Chrome Puppeteer в приложении predix-web-starter. Когда я запускаю код локально в Windows, он работает без нареканий. После того, как я отправляю его в Predix, и когда я запускаю часть, содержащую код Puppeteer, это приводит к ошибке. Кажется, есть некоторые проблемы с библиотекой (не знаю, что). Короче говоря, как я могу заставить Puppeteer работать на Predix?
Predix-web-starter: https://github.com/PredixDev/predix-webapp-starter Кукольник: https://www.npmjs.com/package/puppeteer
Код кукловода:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com', {waitUntil: 'networkidle'});
await page.pdf({path: 'hn.pdf', format: 'A4'});
await browser.close();
})();
Журналы:
2017-11-07T12:40:16.19+0530 [App/0] ERR /home/vcap/app/node_modules/puppeteer/.local-chromium/linux-508693/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory
2017-11-07T12:40:16.19+0530 [App/0] ERR TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md
2017-11-07T12:40:16.19+0530 [App/0] ERR at Interface.close (readline.js:319:8)
2017-11-07T12:40:16.19+0530 [App/0] ERR at endReadableNT (_stream_readable.js:974:12)
2017-11-07T12:40:16.19+0530 [App/0] ERR Potentially unhandled rejection [3] Error: Failed to launch chrome!
2017-11-07T12:40:16.19+0530 [App/0] ERR at onClose (/home/vcap/app/node_modules/puppeteer/node6/Launcher.js:262:14)
2017-11-07T12:40:16.19+0530 [App/0] ERR at emitNone (events.js:91:20)
2017-11-07T12:40:16.19+0530 [App/0] ERR at Interface.emit (events.js:186:7)
2017-11-07T12:40:16.19+0530 [App/0] ERR at _combinedTickCallback (internal/process/next_tick.js:74:11)
2017-11-07T12:40:16.19+0530 [App/0] ERR at Interface.helper.addEventListener (/home/vcap/app/node_modules/puppeteer/node6/Launcher.js:251:50)
2017-11-07T12:40:16.19+0530 [App/0] ERR at Socket.onend (readline.js:106:10)
2017-11-07T12:40:16.19+0530 [App/0] ERR at emitNone (events.js:91:20)
2017-11-07T12:40:16.19+0530 [App/0] ERR at Socket.emit (events.js:186:7)
2017-11-07T12:41:15.21+0530 [RTR/2] OUT puppeter-arjun-app.run.aws-usw02-pr.ice.predix.io - [2017-11-07T07:10:16.196+0000] "GET /puppeteer HTTP/1.1" 502 0 67 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36" "10.72.11.93:2263" "10.72.2.213:61322" x_forwarded_for:"-" x_forwarded_proto:"http" vcap_request_id:"7d0f3007-914a-42d4-536d-b94eb8d2fb6c" response_time:59.022647288 app_id:"02063159-96d9-43c5-a3e9-77f4e72339f4" app_index:"-" x_b3_traceid:"4f11f468be4b6817" x_b3_spanid:"4f11f468be4b6817" x_b3_parentspanid:"-"
2017-11-07T12:41:15.21+0530 [RTR/2] OUT
3 ответа
Недавно было установлено, что с помощью https://github.com/cloudfoundry/apt-buildpack и https://github.com/cloudfoundry/nodejs-buildpack можно установить общие библиотеки, включив их в apt.yml. Однако predix не позволяет использовать multibuildpacks, поэтому я попытался использовать https://github.com/cloudfoundry/multi-buildpack без успеха по неизвестной причине. Я решил это путем создания собственного пакета сборки, взяв код из apt, поместив его в пакет сборки nodejs и затем включив URL-адрес хранилища git в manifest.yml. Это мой пользовательский сборочный пакет.
Похоже, кукловод пытается использовать "разделяемую библиотеку", которая отсутствует или к которой у вас нет доступа. В среде Predix Cloud Foundry ваш доступ к ОС сервера очень ограничен. Вам разрешено использовать ресурсы только внутри контейнера, что позволяет легко выполнять масштабирование.
Какова твоя цель? Пытаетесь запустить тесты браузера? Вы можете попробовать селен в Sauce Labs или Travis.
Это связано с тем, что для правильной работы Chrome на этом хосте требуется больше пакетов. Здесь есть отличный документ по устранению неполадок, предполагающий, что вы имеете некоторый контроль над подготовкой среды.
Другой вариант - использовать другой сервис, который запускает Chrome для вас (который вы можете использовать в AWS или Google Cloud). Это довольно сложный процесс, поэтому я написал https://browserless.io/, который под ключ и поддерживает кукловодов 0.11.0 и 0.12.0.
Надеюсь, что вы попадете на правильный путь, удачи!