【问题标题】:How to run an asynchronous Ruby script with Hubot?如何使用 Hubot 运行异步 Ruby 脚本?
【发布时间】:2012-11-28 00:32:58
【问题描述】:

我想让我的一个 Ruby 脚本可供非开发人员使用(阅读“不愿设置和维护 Ruby 环境”)。

我们还在团队中使用Hubot

现在,我相信你已经猜到我的问题了:“我怎样才能编写一个能调用我的 Ruby 脚本的 Hubot 脚本(CoffeeScript,即 JS)?”

ps:我的脚本需要一段时间才能完成,如果你们知道如何让我的 hubot 提供快速反馈(“我听到了,我会运行你的脚本”)然后通知我什么时候脚本完成了(“您的脚本已成功完成”),这真是太棒了。

【问题讨论】:

    标签: javascript ruby node.js coffeescript hubot


    【解决方案1】:

    我敢肯定,你现在可能已经想通了,但是由于这个问题对我有帮助,我可以放弃 Sean 的答案并完成这个谜题。

    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
    

    我希望这会有所帮助。

    【讨论】:

    • 这完全回答了我的问题。但是,对于其他用户,如果您在无法使用它的情况下运行(在我的情况下,是对异步 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 成功完成后通知脚本是否正确运行,但希望谷歌可以提供帮助:)

    【讨论】:

    • 感谢您的回答。对于其他用户,这有效,但不处理异步回调。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多