2012-12-10 22 views
1

我想将我的一个Ruby脚本提供给不是开发人员的团队成员(阅读“不愿意设置和维护Ruby环境”)。如何用Hubot运行异步Ruby脚本?

我们在我们团队内也使用了Hubot

现在,我确定你已经猜到了我的问题:“我怎么能写一个可以调用我的Ruby脚本的Hubot脚本(CoffeeScript,即JS)?”

ps:我的脚本需要一段时间才能完成,如果你们对如何让我的hubot给出一个快速反馈(“我听到你,我要运行你的脚本”)然后通知我当脚本完成(“脚本成功完成”)时,它将会非常棒。

回答

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 

我希望这有助于。

+1

这完全回答了我的问题。但是,对于其他用户,如果您在无法使用的情况下运行(在我的情况下,是对异步Web服务的请求),则可以使用可以在Hubot使用的通道而不是直接与Hubot通信的工具。在我的情况下,Hubot可通过HipChat获得,所以我使用HipChat的Ruby gem在请求处理后异步提供反馈。 –

2

你能用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可以帮助解决这个问题:)

+0

感谢您的回答。对于其他用户,这可以工作,但不处理异步回调。 –