запрос http (используя net http или RestClient) внутри моего контроллера rails - PullRequest
2 голосов
/ 07 октября 2011

У меня проблема с созданием http-запроса внутри действия моего контроллера.Я использовал net / http и RestClient, но не могу заставить его работать на моем локальном URL-адресе сервера, т.е. http://localhost:3000/engine/do_process, Я всегда получаю requesttimeout, однако он работает с другим действительным URL-адресом.

Надеюсь, что вы можете просветитья на этом.Я провел некоторое исследование, но не могу найти ресурсы, чтобы понять, почему у меня возникла проблема с тайм-аутом.

Пример кода контроллера:

require 'rest_client'

class LgController < ApplicationController
  def get_lgjson

     response =  RestClient.get("http://localhost:3000/engine/do_process_lg")
     @generated_json = response.to_str

  end
end

Ответы [ 2 ]

1 голос
/ 18 июля 2016

Я тоже столкнулся с этой проблемой сегодня точно в том же контексте: используя Ruby RestClient , чтобы сделать HTTP-запрос внутри контроллера. Ранее он работал в другом проекте, используя OpenURI без проблем. Это было удивительно, потому что обе библиотеки http, RestClient и OpenURI для Ruby, используют одну и ту же библиотеку Net :: HTTP .

Это URL, который имеет значение. Мы можем установить соединение с внешним URL в контроллере, но не с localhost. Кажется, проблема в дублированном соединении с localhost. Уже есть соединение с localhost open, и мы пытаемся открыть второй. Это не похоже на однопоточный веб-сервер, например, Thin . Может помочь многопоточный веб-сервер, такой как Puma .

0 голосов
/ 19 июня 2013

Я думаю, это потому, что вы используете однопоточный веб-сервер. У вас есть две возможности исправить.

  1. использование пассажира

  2. определить, имеет ли смысл указывать net / http для localhost.

...