Почему я получаю «Errno :: ECONNREFUSED» с «net / http» в Rails? - PullRequest
6 голосов
/ 03 июня 2011

Я пытаюсь разобрать файл XML по URL.Когда я пытаюсь что-то вроде этого:

require 'net/http'
require 'rubygems'
require 'xmlsimple'

url = 'http://my-address.com/xmltest/note.xml'
xml_data = Net::HTTP.get_response(URI.parse(url)).body

Все работает, но только когда я делаю это вне моего проекта Rails.Если я попытаюсь включить этот файл в свой проект Rails 3 и проанализировать его там, я получаю ошибку "Errno::ECONNREFUSED in [controller]" - Connection refused - connect(2).

Моя проблема заключается в следующем: я не знаю, как установить компонент net/http.Я ищу его на http://www.rubygems.org,, но не могу его найти.

Ответы [ 2 ]

6 голосов
/ 03 июня 2011

Net::HTTP является частью стандартной библиотеки Ruby.Вы можете использовать require 'net/http', чтобы загрузить его.

Вместо использования Net::HTTP, который является достаточно низким уровнем для того, что вы хотите сделать, я бы рекомендовал использовать Ruby's Open::URI.

Если выВы перемещаете много HTTP-данных, возможно, вы захотите взглянуть на что-то вроде HTTPClient или Curb или Typhoeus, которые предназначены для тяжелого использования и избавят вас от необходимости писать все это с использованием Net::HTTP.

Относительно ошибки ECONNREFUSED: вы можете захотеть перехватить HTTPResponse, возвращенный из get_response, а затем проверить его состояние, прежде чем пытаться прочитать тело.То, как вы делаете это сейчас, не позволяет вам реагировать на неудачный запрос.

2 голосов
/ 03 июня 2011

Похоже, проблема в том, что вы не можете подключиться к HTTP-серверу.
Вы можете попробовать проверить доступ к URL в браузере.

...