Ошибка при попытке открыть URL в Ruby on Rails - PullRequest
13 голосов
/ 10 февраля 2011

Среда: Ruby 1.9.2, Rails 3.0.3, Ubuntu

Когда я пытаюсь открыть URL с помощью:

open("http://www.cnn.com")

Я получаю следующую ошибку:

Errno::ENOENT: No such file or directory - http://www.cnn.com
    from (irb):9:in `initialize'
    from (irb):9:in `open'
    from (irb):9

(это сложная тема для поиска). Это происходит как в irb, так и в моем приложении. Раньше он работал под Ruby 1.8.7 и Rails 2.3.4, но похоже, что-то изменилось.

Ответы [ 3 ]

24 голосов
/ 01 июля 2011

Я могу воспроизвести ошибку, если попытаюсь

open('http://www.google.com')

Я получу эту ошибку: `initialize ': Нет такого файла или каталога - http://www.google.com (Errno :: ENOENT)

Вместо этого мне потребовался open-uri в ruby ​​1.9.2, и это сработало -

require 'open-uri'

url = URI.parse('http://www.google.com')
open(url) do |http|
  response = http.read
  puts "response: #{response.inspect}"
end
2 голосов
/ 26 июля 2013

Я попробовал что-то подобное в разделе упражнений Codecademy.Оказывается, запрос был закрыт обратной косой чертой.Очевидно, open('http://google.com/') прошел нормально, а open('http://google.com') - нет.

1 голос
/ 10 февраля 2011

Я не могу воспроизвести ошибку, в 1.8.7 я получаю объект File, а в 1.9.2 я получаю объект StringIO.Я предполагаю, что какой-то другой код переопределяет эту функциональность.Возможно, вы можете попробовать использовать вместо этого объект Net :: HTTP :

require 'net/http'
require 'uri'
Net::HTTP.get_print URI.parse('http://www.cnn.com')

или

require 'net/http'
require 'uri'

url = URI.parse('http://www.cnn.com')
res = Net::HTTP.start(url.host, url.port) {|http|
  http.get('/')
}
puts res.body
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...