2017-03-23 45 views
5

我想從動態句柄網頁生成一個PDF文件,它將顯示數據庫中的數據。一旦我在本地機器上完成這個工作,我想將代碼移動到彈性beanstalk中。代碼似乎運行,最初使調用產卵,但是,調用phantomjs似乎並沒有啓動傳遞給它的腳本。爲了確認,我在文件的開頭添加了一個console.log語句,並且從不打印。更不用說腳本文件中的其他打印語句了。代碼如下:phantomjs調用node.js使用spawn似乎並不執行腳本

code that performs the spawn: 
var childArgs = [ 
        //'--debug=true', 
        path.join(__dirname, '../phantom/capture.js'), 
        id, 
        filename 
       ]; 

      let child = spawn(phantomjs.path, childArgs, {detached: false}); 

      console.log('set up stderr.....'); 
      child.stderr.on('data', (data) => { 
       console.log('ps stderr: ${data}'); 
      }); 

      console.log('set up stdout.....'); 
      child.stdout.on('data', (data) => { 
       console.log('ps stdout: ${data}'); 
      }); 

      console.log('set up close.....'); 
      child.on('close', (code) => { 
       console.log('this is a test 2.....'); 
       console.log(code); 
       if (code !== 0){ 
        let error = new Error('An error occurred while creating the current report.'); 
        error.status = 500; 
        reject(error); 
       } 

       resolve(fname); 
       return; 
      }); 




capture.js: 
console.log('we are inside....'); 
let os = require('os'); 
var system = require('system'); 
console.log('we are inside.... 1'); 
var page = require('webpage').create(); 
let phantom = require('phantomjs-prebuilt'); 
console.log('we are inside....2'); 
var args = system.args; 
console.log('we are inside....3'); 

if (args.length === 1) { 
    phantom.exit(0); 
} else { 
    page.viewportSize = { width: 2000, height: 800 }; 
//page.paperSize = { format: 'Letter', orientation: 'landscape', margin: '1cm' }; 
page.paperSize = { width: '1280px', height: '800px', margin: '0px' }; 
page.settings.localToRemoteUrlAccessEnabled = true; 
page.settings.loadImages = true; 
page.settings.javascriptEnabled = true; 

let done = false; 
//"http://example.com/order/" + args[1] + '?token=' + args[2] 
page.open("http://example.com/order/" + args[1], function start(status) { 
    if (status === "success"){ 
     page.render(os.tmpdir() + '/' + args[2], { format: 'pdf' }); 
    } 

    done = true; 
}); 

var intervalId = setInterval(function(){ 
    if (done){ 
     phantom.exit(); 
    } 
}, 100); 
} 

我在這個問題可能出現的地方處於虧損狀態。 capture.js的第一行似乎沒有被調用。 1)我錯過了什麼問題? 2)我該如何解決它?

回答

0

問題可能是由於安全原因,PhantomJS無法運行帶點的路徑的capture.js。例如,嘗試從當前目錄運行capture.js。