Ошибка выполнения Puppeteer из PHP - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть скрипт узла, который преобразует веб-страницу в документ PDF.Пользователь вводит некоторый контент, а PHP создает HTML-страницу, которая затем используется в скрипте узла (который запускает Puppeteer, используя слегка измененную версию пример скрипта ) для преобразования его в PDF.

Но когда я exec в PHP вводит команду для запуска скрипта узла, происходит сбой со следующей ошибкой:

(node:14832) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome!
[0424/165455.239499:ERROR:icu_util.cc(133)] Invalid file descriptor to ICU data received.
[0424/165455.239717:FATAL:content_main_delegate.cc(53)] Check failed: false.
#0 0x55f27f255b0c base::debug::StackTrace::StackTrace()
#1 0x55f27f26e780 logging::LogMessage::~LogMessage()
#2 0x55f27d5f7d23 content::ContentMainDelegate::TerminateForFatalInitializationError()
#3 0x55f27ef90deb content::ContentMainRunnerImpl::Initialize()
#4 0x55f27ef9ab72 service_manager::Main()
#5 0x55f27ef8ff14 content::ContentMain()
#6 0x55f28309f9b9 headless::(anonymous namespace)::RunContentMain()
#7 0x55f28309fa42 headless::HeadlessBrowserMain()
#8 0x55f27ef97f9d headless::HeadlessShellMain()
#9 0x55f27d5f61ac ChromeMain
#10 0x7efcaad45c05 __libc_start_main
#11 0x55f27d5f602a _start

PHP работает с пользователем apache.Однако, если я запускаю тот же скрипт со своим пользователем, он работает отлично.Когда я выполняю в терминале, используя su - apache -c 'node ...', он снова выдает ошибку, описанную выше.

Что вызывает ошибку?Что-то связано с разрешениями пользователя apache?Я следовал всем инструкциям по устранению неполадок, но в данный момент мне не повезло.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Кажется, проблема связана с разрешениями файловой системы для хрома по умолчанию, используемого кукловодом:

с использованием ACL (моя группа nginx www-data, измените на вашу для apache):

sudo setfacl -R -m g:www-data:rX node_modules/puppeteer/.local-chromium/

и

sudo setfacl -dR -m g:www-data:rX node_modules/puppeteer/.local-chromium/

после установки разрешений ошибка исчезла.

0 голосов
/ 27 апреля 2018

Я использовал пакетную версию Chromium, которая поставляется вместе с библиотекой Puppeteer (как установлено с помощью npm install puppeteer).

Вместо того, чтобы использовать эту версию, я попытался установить Chromium для всей системы и дать сценарию узла путь к общесистемной установке Chromium. Наконец-то это работает, в этой версии нет такой странной проблемы!

Чтобы выполнить Puppeteer, используя другой исполняемый файл:

const browser = await puppeteer.launch({
    args: ['--no-sandbox', '--disable-setuid-sandbox'],
    headless: true,
    executablePath: '/usr/bin/chromium-browser'
});

Я поищу другие ответы, если вместо установки Chromium в системе есть другое решение.

...