Как запустить асинхронный скрипт Ruby с помощью Hubot?

Я хочу сделать один из моих Ruby-скриптов доступным для моих товарищей по команде, которые не являются разработчиками (читай «неохотно настраивают и поддерживают среду Ruby»).

Мы также используем Hubot в нашей команде.

Я уверен, что вы уже догадались о моем вопросе: «Как я могу написать сценарий Hubot (CoffeeScript, т.е. JS), который может вызывать мой сценарий Ruby?»

PS: выполнение моего сценария занимает некоторое время, если у вас, ребята, есть идея, как я могу заставить мой хабот давать быструю обратную связь («я слышал вас, я собираюсь запустить ваш сценарий»), а затем уведомить меня, когда сценарий будет done («ваш скрипт успешно завершен»), это было бы просто потрясающе.


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, поэтому я использую гем HipChat Ruby для асинхронной обратной связи после обработки запроса. - 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