2017-05-18 8 views
0

jsonオブジェクトを取得してWebページをレンダリングし、Nightmare.jsの電子ブラウザを介してpdfに出力する空白のWebジョブを実行しようとしています。Nightmare.jsがAzure Webjobで動作しない

これをローカルで実行すると完全に動作しますが、私がazure webjobで実行すると完了しません。
2つの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); 
    }); 
} 

リックは彼の答えで述べたように、これは現在動作しません

を解決! この文書では、webjobsサンドボックスの現在の状態を示しています。
https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox
また、私の問題に関連する次の段落があります:HTMLから

PDF生成を

HTMLを変換するために使用される複数のライブラリがあります。 PDFへ多くのWindows/.NET固有のバージョンはIE APIを活用しているため、User32/GDI32を幅広く活用しています。これらのAPIは、計画に関係なくサンドボックス内で大きくブロックされているため、これらのフレームワークはサンドボックスでは機能しません。

User32/GDI32を幅広く利用しないフレームワーク(wkhtmltopdfなど)があります。これらは、SQL Reportingを有効にしたのと同じ方法でBasic +で有効にしています。

+0

[WebJobs](https://docs.microsoft.com/ja-jp/azure/app-service-web/web-sites-create-web-jobs)のどのタイプを使用していますか?オンデマンドで、継続的に、またはスケジュールどおりに実行できますか? –

+0

私はスクリプトでhttpウェブサーバーを実行しているので、私は継続的に使用しています。 – Jeppe

+0

関数 'createPage'はどこにありますか? –

答えて

0

nightmare.jsが動作するには、WebJobを使用していないデスクトップとの対話が必要です。

はGithubの上 this issueから撮影:

悪夢は本当にヘッドレスではありません:それは、順番に(今のところ、少なくとも で)正しく表示するためにフレームバッファを必要と 仕事に電子インスタンスが必要です。

これは、Azure WebJobでは実行されません。

+0

ありがとう、私は適切なキーワードを検索しました – Jeppe

関連する問題