2011-02-10 53 views
12

环境:红宝石1.9.2,Rails的3.0.3,Ubuntu的错误当试图on Rails的打开在Ruby URL

当我尝试使用打开一个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下工作,但似乎有些变化。

+0

奇怪..为什么不用.js来做这件事? – Trip 2011-02-10 02:07:56

回答

23

我可以重现的错误,如果我尝试

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

我会得到这个错误:'初始化” :没有这样的文件或目录 - http://www.google.com(Errno :: ENOENT)

取而代之,我在红宝石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 
0

我不能重现错误,在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 
+0

谢谢youuuu !!!! – samccone 2011-10-14 04:20:51

2

我在Codecademy的练习部分尝试了类似的东西。原来,请求想要一个结束反斜杠。显然open('http://google.com/')经过罚款,其中open('http://google.com')没有。

+0

奇怪的是,这实际上解决了我在尝试打开图片url时收到的(404未找到)错误。 – MTarantini 2016-12-16 19:57:33