在云代工node.js上运行subprocess

有没有人试图在Cloud Foundry的node.js上运行subprocess?

我有以下代码在本地运行良好:

var port = (process.env.VMC_APP_PORT || 3000), host = (process.env.VCAP_APP_HOST || 'localhost'), http = require('http'); var childProcess = require('child_process'), phantom = require('phantomjs'), ls; http.createServer(function(req, res) { ls = childProcess.exec('phantomjs -h', function (error, stdout, stderr) { if (error) { console.log(error.stack); console.log('Error code: '+error.code); console.log('Signal received: '+error.signal); } console.log('Child Process STDOUT: '+stdout); console.log('Child Process STDERR: '+stderr); }); ls.on('exit', function (code) { console.log('Child process exited with exit code '+code); res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Working...'); res.end(); }); }).listen(port, host); 

vmc pushcloudfoundry.com ,它给了我在vmc logs错误

 Reading logs/stdout.log... OK Child process exited with exit code 127 Error: Command failed: /bin/sh: phantomjs: not found at ChildProcess.exithandler (child_process.js:536:15) at ChildProcess.EventEmitter.emit (events.js:91:17) at maybeClose (child_process.js:634:16) at Socket.ChildProcess.spawn.stdin (child_process.js:805:11) at Socket.EventEmitter.emit (events.js:88:17) at Socket._destroy.destroyed (net.js:358:10) at process.startup.processNextTick.process._tickCallback (node.js:244:9) Error code: 127 Signal received: null Child Process STDOUT: Child Process STDERR: /bin/sh: phantomjs: not found Child process exited with exit code 127 Error: Command failed: /bin/sh: phantomjs: not found at ChildProcess.exithandler (child_process.js:536:15) at ChildProcess.EventEmitter.emit (events.js:91:17) at maybeClose (child_process.js:634:16) at Socket.ChildProcess.spawn.stdin (child_process.js:805:11) at Socket.EventEmitter.emit (events.js:88:17) at Socket._destroy.destroyed (net.js:358:10) at process.startup.processNextTick.process._tickCallback (node.js:244:9) Error code: 127 Signal received: null Child Process STDOUT: Child Process STDERR: /bin/sh: phantomjs: not found 

然后我还在下面添加了package.json文件,仍然是同样的错误:

 { "name" : "mytestchildprocesses", "version" : "0.1.0", "dependencies" : { "phantomjs" : "1.8.1-3", "child_process" : "0.xx", "http" : "0.0.0" } } 

或者,我尝试了其他人在node.js上放置phantomjs: https : //github.com/sgentle/phantomjs-node 。 但是这个选项甚至不能在我的本地机器上运行(在Windows中无法调用phantomjs.cmd)。

我宁可想出如何在cloudfoundry.com上执行subprocess,如果你们可以帮忙的话。

万分感激!!

看起来像Phantom.js需要一个名为“phamtom”的二进制文件。 我build议看看节点光纤包 – https://github.com/laverdet/node-fibers 。 这个库不依赖于任何本地的二进制文件,并应该正常工作。

所以我只是在本地尝试你的代码,并有问题。

随着package.json npm安装给我一个关于npm回购不存在的child_process错误。 删除该行使npm安装完成。

然后我得到有关phantomjs不能在path上执行的错误。

如果我全局安装phantomjs,当我点击localhost:3000时,在节点控制台上看到关于phantomjs的错误参数的错误

我并不感到惊讶的是,这有上传到Cloud Foundry的问题,因为它肯定需要一个有效的package.json来启用相关节点模块的远程安装,如果它依赖于全局安装,它也会有问题。

确保'phantomjs'在你的package.json中列为依赖(不要和'phantom'包混淆)。

从那里你可以通过使用下面的代码片段获得幻影可执行文件的二进制path。 phantomjs软件包确保幻像软件包安装在系统上。 这也适用于云代工。

 var phantomjs = require('phantomjs') var binPath = phantomjs.path ls = childProcess.exec(binPath + ' -h' //.etc etc