Ошибка EHOSTUNREACH при локальной отправке HTTP-запроса из Hubot в приложение Rails - PullRequest
0 голосов
/ 07 мая 2019

Я занимаюсь разработкой бота Slack (с использованием Hubot ), а также приложения Rails, которое будет получать от него HTTP-запросы и обрабатывать их соответствующим образом. По сути, шаги высокого уровня того, что я хочу сделать, выглядят так:

  1. Неопытный пользователь отправляет слово триггера боту (скажем, триггер "пока").
  2. Hubot подхватывает триггер, а затем отправляет запрос в приложение Rails.
  3. Приложение 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

1 Ответ

0 голосов
/ 07 мая 2019

Измените запрос на robot.http("http://localhost:3000"), гарантируя, что у вас есть протокол в начале.

...