Подтвердить что ты не робот

Ошибка при попытке открыть URL-адрес в Ruby on Rails

Окружающая среда: 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, но, похоже, что-то изменилось.

4b9b3361

Ответ 1

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

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

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

Ответ 3

Я не могу воспроизвести ошибку, в 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