从Hubot向本地Rails应用发送HTTP请求时出现EHOSTUNREACH错误

时间:2019-05-07 06:08:26

标签: ruby-on-rails routing coffeescript hubot

我正在开发一个Slack机器人(使用Hubot)以及一个Rails应用,该应用将从其接收HTTP请求并进行相应的处理。基本上,我要执行的高级步骤如下:

  1. 一个懒惰的用户向机器人发送触发词(假设触发是“再见”)。
  2. Hubot拿起触发器,然后向Rails应用发送请求。
  3. Rails应用程序将Slack用户标记为不在办公室。

我似乎遇到了某种路由问题,因为当我尝试在两个应用程序都已启动的情况下执行此流程时,我遇到了EHOSTUNREACH错误(对于Rails,rails s和对于Hubot,./bin/hubot --adapter slack) )。我猜想Hubot根本无法访问Rails应用程序。 我在这里想念什么吗?我需要使用什么URL来使这些应用程序相互发送请求?

我也尝试过将127.0.0.1:3000localhost:3000换出,但结果保持不变。

机器人代码

module.exports = (robot) ->
  robot.respond /bye/i, (res) ->
    res.reply('Later alligator')
    robot.logger.info 'Will proceed to clock out user'

    data = JSON.stringify({
      slack_user_id: res.message.user.id
    })
    robot.http("127.0.0.1:3000/")
      .header('Content-Type', 'application/json')
      .post(data) (err, resp, body) ->
        if err
          robot.logger.info "Encountered an error: #{err}"
        else
          robot.logger.info 'Successfully sent HTTP request to Rails app'

将触发字发送给漫游器时记录结果

INFO Will proceed to clock out user
INFO Encountered an error: Error: connect EHOSTUNREACH 0.0.11.184:80 - Local (192.168.91.168:60029)

启动服务器日志(肯定是端口3000)

* Listening on tcp://localhost:3000

1 个答案:

答案 0 :(得分:0)

将请求更改为robot.http("http://localhost:3000"),以确保您具有开始的协议。