Как да стартирате асинхронен Ruby скрипт с Hubot?

Искам да направя един от моите Ruby скриптове достъпен за моите съотборници, които не са разработчици (прочетете „не желаят да настройват и поддържат Ruby среда“).

Ние също така използваме Hubot в нашия екип.

Досега съм сигурен, че сте познали въпроса ми: "как мога да напиша Hubot скрипт (CoffeeScript, т.е. JS), който може да извика моя Ruby скрипт?"

ps: завършването на скрипта ми отнема известно време, ако имате идея как мога да накарам моя hubot да даде бърза обратна връзка („чух те, ще стартирам скрипта ти“) и след това да ме уведоми, когато скриптът е готово („вашият скрипт завърши успешно“), би било просто страхотно.


person Dirty Henry    schedule 10.12.2012    source източник


Отговори (2)


Сигурен съм, че вероятно сте го разбрали досега, но тъй като този въпрос ми помогна, мога да изляза от отговора на Шон и да попълня пъзела.

module.exports = (robot) ->
    robot.respond /your regex/i, (msg) ->
    cp = require "child_process" 
    cp.exec "./path/from/root/to/ruby script", (error, stdout, stderr) ->  
        if error
            msg.send "Sorry I encounted this error \n" + stderr
        else
            msg.send "Done. The output: \n" + stdout

Надявам се това да помогне.

person Marco    schedule 18.07.2013
comment
Това отговаря напълно на въпроса ми. Въпреки това, за други потребители, ако стартирате в случай, когато това не може да се използва (в моя случай, заявка към асинхронна уеб услуга), можете да използвате инструменти, които могат да комуникират по канала, използван от Hubot, а не Hubot директно. В моя случай Hubot е достъпен чрез HipChat, така че използвам Ruby gem на HipChat, за да дам асинхронно обратна връзка, след като заявката бъде обработена. - person Dirty Henry; 30.09.2013

Можете ли просто да използвате exec, за да стартирате скрипта си? Нещо като:

module.exports = (robot) ->
  robot.hear /run my command/i, (msg) ->
    exec "cd /path/to/ruby/script && ruby yourscript.rb"
    msg.send "i heard you, i'm gonna run your script."

Надяваме се, че това ви насочва по правилния път. Не съм сигурен какви видове куки ще трябва да поставите, за да изчака, докато exec завърши успешно, за да уведоми дали скриптът е изпълнил правилно, но се надяваме, че Google може да помогне с това :)

person Sean    schedule 10.12.2012
comment
Благодаря за вашият отговор. За други потребители това работи, но не обработва асинхронно обратно извикване. - person Dirty Henry; 30.09.2013