环境: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下工作,但似乎有些事情发生了变化。
答案 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