尝试在Ruby on Rails中打开URL时出错

时间:2011-02-10 01:31:13

标签: ruby-on-rails url

环境:Ruby 1.9.2,Rails 3.0.3,Ubuntu

当我尝试使用以下命令打开网址时

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 个答案:

答案 0 :(得分:24)

如果我尝试

,我可以重现错误
open('http://www.google.com')

我会收到这个错误:`initialize':没有这样的文件或目录 - http://www.google.com(Errno :: ENOENT)

相反,我在ruby 1.9.2中要求'open-uri'并且它有效 -

require 'open-uri'

url = URI.parse('http://www.google.com')
open(url) do |http|
  response = http.read
  puts "response: #{response.inspect}"
end

答案 1 :(得分:2)

我在Codecademy的练习部分尝试过类似的东西。事实证明,该请求需要一个反斜杠。显然,open('http://google.com/')open('http://google.com')没有的情况下进行了很好的审核。

答案 2 :(得分:1)

我无法重现错误,在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