Nightmare.js не работает с веб-заданием Azure

Я пытаюсь запустить лазурное веб-задание, которое берет объект json и отображает веб-страницу, а затем распечатывает ее в pdf через электронный браузер в Nightmare.js.

Когда я запускаю это локально, оно работает отлично, но когда я запускаю его в лазурном веб-задании, оно никогда не завершается.
Я получаю два console.log операторы выводят в журнал, но, поскольку я не могу ничего вывести из вызовов nightmare.js и не отобразить окно электронного браузера, я понятия не имею, что происходит не так.

В сценарии также есть веб-сервер, опущенный, так как кажется, что он принимает запрос с объектом json и передает его createPage просто хорошо.

Я проверил, что файл index.html находится в правильном каталоге. Кто-нибудь знает, что может быть не так?

var Nightmare = require('nightmare'),
    http = require('http');

function createPage(o, final) {

    var start = new Date().getTime();
    var page = Nightmare({
        //show: true, //uncomment to show electron browser window
        //openDevTools: { mode: 'detach'}, //uncomment to open developer console ('show: true' needs to be set)
        gotoTimeout: 300000, //set timeout for .goto() to 2 minutes
        waitTimeout: 300000, //set timeout for .wait() to 5 minutes
        executionTimeout: 600000 //set timeout for .evaluate() to 10 minutes
    })
    .goto('file:\\\\' + __dirname + '\\index.html');

    page.wait("#ext-quicktips-tip") //wait till HTML is loaded
    .wait(function () { // wait till JS is loaded
        console.log('Extjs loaded.');
        return !!(Ext.isReady && window.App && App.app);
    });

    console.log("CreatePage()1");

    page.evaluate(function (template, form, lists, printOptions) {
        App.pdf.Builder.create({
            template: template,
            form: form,
            lists: lists,
            format: o.printOptions.format,
        });
        console.log('Create done');
    }, template, form, o.lists, printOptions);

    console.log("CreatePage()2");
    page.wait(function () {
        console.log('Content created. ' + App.pdf.Builder.ready);
        return App.pdf.Builder.ready;
    })
    .pdf(o.outputDir + form.filename, { "pageSize": "A4", "marginsType": 1 })
    .end()
    .then(function () {
        console.log('Pdf printed, time: ' + (new Date().getTime() - start) / 1000 + ' seconds');
        final(true);
    })
    .catch(function (err) {
        console.log('Print Error: ' + err.message);
    });
}

решаемая

Как говорит Рик в своем ответе, в настоящее время это не сработает! Этот документ перечисляет текущее состояние песочницы веб-заданий:
https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox
В нем есть следующий параграф, касающийся моей проблемы:

Генерация PDF из HTML

Есть несколько библиотек, используемых для преобразования HTML в PDF. Многие версии для Windows/.NET используют API-интерфейсы IE и, следовательно, широко используют User32/GDI32. Эти API в значительной степени заблокированы в песочнице (независимо от плана), и поэтому эти платформы не работают в песочнице.

Существуют некоторые платформы, которые не используют User32/GDI32 широко (например, wkhtmltopdf), и мы работаем над тем, чтобы включить их в Basic+ так же, как мы включили SQL Reporting.

1 ответ

Решение

Я думаю, для того, чтобы nightmare.js работал, вам нужно взаимодействие с рабочим столом, которое вы не получите на WebJob.

Взято из этого номера на Github:

Кошмар не является действительно безголовым: для его работы требуется экземпляр Electron, который, в свою очередь, требует, чтобы фрейм-буфер работал правильно (по крайней мере, на данный момент).

Это не будет работать на веб-задании Azure.

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