【发布时间】:2019-09-24 18:06:04
【问题描述】:
我正在开发一个 Slack 机器人(使用 Hubot)以及一个 Rails 应用程序,它将接收来自它的 HTTP 请求并相应地处理它们。基本上,我想做的高级步骤是这样的:
- Slack 用户向机器人发送触发词(假设触发词是“再见”)。
- Hubot 获取触发器,然后向 Rails 应用发送请求。
- Rails 应用将 Slack 用户标记为不在办公室。
我似乎遇到了某种路由问题,因为当我尝试在启动两个应用程序的情况下执行此流程时出现EHOSTUNREACH 错误(rails s 用于 Rails,./bin/hubot --adapter slack 用于 Hubot)。我猜 Hubot 根本无法访问 Rails 应用程序。
我在这里错过了什么吗?我需要使用什么 URL 才能使这些应用相互发送请求?
我也尝试将127.0.0.1:3000 替换为localhost:3000,但结果保持不变。
Hubot 代码
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)
Rails 服务器日志(肯定是 3000 端口)
* Listening on tcp://localhost:3000
【问题讨论】:
-
用localhost:3000检查你在浏览器中得到的东西,如果它不起作用,你可能有本地网络配置问题。如果它确实有效,请尝试将您的代码更改为
robot.http("http://localhost:3000")并使用结果更新您的帖子。您的错误消息似乎表明它正在尝试连接端口 80。 -
@DaveSatchell 我将其更改为
robot.http("http://localhost:3000")并且有效。有点尴尬,这是一个如此微不足道的问题......非常感谢! -
谢谢,我已作为答案提交,您可以接受并关闭问题。
标签: ruby-on-rails routing coffeescript hubot