2015-01-06 2 views
0

Я хочу ждать сервер будет готов, а затем выполнить задачу на немGrunt задача - ждать сервера (selendroid), чтобы быть готовым

EDIT: У меня некоторые этого разобрался. Я правильно фильтрую для своей строки. Однако, как я могу сохранить это в фоновом режиме и завершить его, когда последовательность grunt завершена?

Рассмотрим grunt common server spec-e2e Это будет запускать общие задачи, запустить сервер чернового, а затем (без остановки сервера) запускает следующую задачу на вершине. По завершении всего этого он автоматически отключит сервер.

Это та функциональность, которую я пытаюсь создать.

ответ

0

Несколько важных моментов, которые я узнал:

  • Процессы, запускаемые из узла - например, require('child_process').spawn(...) - продолжит выполнение всех последующих задач grunt (они не будут закрыты после завершения одной задачи).
  • Как только хрюканье закончит выполнение последовательности задач, оно прекратит все порожденные процессы.

Таким образом, команда grunt selendroid:selendroid.jar spec-e2e - где selendroid задача запускается сервер - будет держать сервер не работает до тех пор, после завершения spec-e2e задачи.

Код для моей selendroid задачи является:

grunt.registerTask('selendroid', 'Start selendroid server', function (appLocation) { 
    var done = this.async(); 
    var timeout = setTimeout(function() { 
     console.log('Selendroid took too long to start'); 
     done(false); 
    }, 30000); 

    function checkLoaded(data) { 
     data = data.toString(); 
     if (data.indexOf('Selendroid standalone server has been started on port') > -1) { 
      clearTimeout(timeout); 
      done(); 
     } 
    } 

    if (typeof appLocation === 'undefined') { 
     console.log('App to test not set, aborting...'.red); 
     done(false); 
    } 

    var cmd = require('child_process').spawn('java', ['-jar', 'selendroid.jar', '-app', appLocation]); 
    cmd.stdout.on('data', function(data) { 
     checkLoaded(data); 
    }); 
    cmd.stderr.on('data', function(data) { 
     checkLoaded(data); 
    }); 
});