2013-02-24 5 views
1

Кто-нибудь пытался запустить дочерние процессы на node.js Cloud Foundes?Запуск дочерних процессов на облачном литейном узле.js

У меня есть ниже код работает нормально локально:

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 push на cloudfoundry.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.x.x", 
    "http" : "0.0.0" 
    } 
} 

В качестве альтернативы, я попробовал кого-то еще по работе над установкой phantomjs на node.js: https://github.com/sgentle/phantomjs-node. Но этот параметр даже не работает на моей локальной машине (не мог вызвать phantomjs.cmd в Windows).

Я скорее понял, как выполнять дочерние процессы в cloudfoundry.com, если вы, ребята, можете помочь.

Действительно оцените !!

ответ

0

Так что я просто попробовал свой код на месте и имел проблемы.

С этой установкой package.json npm выдает мне ошибку о child_process, которая не существует в репире npm. Удаление этой строки позволяет завершить установку npm.

Затем я получаю ошибки о том, что phantomjs не являются исполняемыми на пути.

Если я установлю phantomjs во всем мире, я вижу ошибку о неверных аргументах phantomjs на консоли узла, когда я ударил Localhost: 3000

Я не удивлен, что есть проблемы, загруженные в Cloud Foundry, как это, безусловно, требуют действительного package.json для включения удаленной установки соответствующих модулей узлов, и если он будет полагаться на глобальную установку, он также будет иметь проблемы.

+0

phantomjs может быть установлен локальным или глобальным, но PATH (для Windows) должен указывать на phantomjs.bat (или .cmd). В этом случае возникает вопрос: как правильно выполнить дочерний процесс, когда изагрузка должна быть загружена? –

1

Похоже, что Phantom.js требует двоичный файл под названием «phamtom». Я бы предложил взглянуть на пакет узлов - https://github.com/laverdet/node-fibers. Эта библиотека не полагается на какие-либо родные двоичные файлы и должна работать нормально.

+0

Может быть, я что-то пропустил, но как помогают узловые волокна? –

+0

Извините, может быть, я неправильно понял. Вы просто хотите, чтобы начать новый процесс в Node.js, правильно? Если это так, вы можете легко достичь этого с помощью модуля узловых волокон. –

+0

Я думаю, что я медленный, но есть ли какой-нибудь пример для запуска нового процесса с узловыми волокнами? https://github.com/laverdet/node-fibers –

0

Убедитесь, что «phantomjs» указан в вашей упаковке.json как зависимость (не путать с пакетом «фантом»).

Оттуда вы можете получить двоичный путь к исполняемому фантому, используя следующий фрагмент. Пакет phantomjs гарантирует, что фантомный пакет будет установлен в системе. Это работает и в облачном литейном производстве.

var phantomjs = require('phantomjs') 
var binPath = phantomjs.path 
ls = childProcess.exec(binPath + ' -h' //.etc etc 
Смежные вопросы