【问题标题】:Error When Trying to Open a URL in Ruby on Rails尝试在 Ruby on Rails 中打开 URL 时出错
【发布时间】:2011-02-10 01:31:13
【问题描述】:

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

【问题讨论】:

  • 奇怪.. 为什么不用 .js 做这个?

标签: ruby-on-rails url


【解决方案1】:

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

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

我会收到这个错误:`initialize': No such file or directory - 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

【讨论】:

    【解决方案2】:

    我在 Codecademy 的练习部分尝试了类似的方法。事实证明,该请求需要一个结束反斜杠。显然open('http://google.com/') 很好,而open('http://google.com') 没有。

    【讨论】:

    • 令人惊讶的是,这实际上解决了我在尝试打开图像 url 时收到的 (404 not found) 错误。
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2016-04-01
      • 2023-01-19
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      相关资源
      最近更新 更多