【问题标题】:rails nokogiri no such file or directoryrails nokogiri 没有这样的文件或目录
【发布时间】:2012-11-03 19:33:32
【问题描述】:

宝石文件

...
gem 'nokogiri'
...

在控制器中

doc = Nokogiri::HTML(open('http://google.com'))

我遇到了一个错误

Errno::ENOENT in SiteController#scrap
No such file or directory - http://google.com
app/controllers/site_controller.rb:6:in `initialize'
app/controllers/site_controller.rb:6:in `open'
app/controllers/site_controller.rb:6:in `scrap'

我尝试删除 Gemfile.lock 并再次执行“捆绑安装”,但这并没有解决我的问题。

导轨 2.3.8

红宝石 1.9.3p194

我做错了什么?提前感谢您的帮助

【问题讨论】:

    标签: ruby-on-rails ruby nokogiri


    【解决方案1】:

    如果要将 URL 传递给 open(),则需要 require 'open-uri'。此外,您需要在打开文件后阅读文件:

    require 'open-uri'
    doc = Nokogiri::HTML(open('http://google.com').read)
    

    【讨论】:

    • 我认为您不需要阅读该文件,我不需要它就可以工作。
    【解决方案2】:

    我试图将 http 作为模型中的文件访问。

    For instance :
    web_doc = Nokogiri::HTML(open("https://www.abokifx.com/", :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE))
    ERROR which was thrown 
    
    Errno::ENOENT: No such file or directory @ rb_sysopen - https://www.abokifx.com/
        from (irb):10:in `initialize'
        from (irb):10:in `open'
        from (irb):10
    

    由于 open 无法将 https URL 作为文件读取。 OpenURI 是一个易于使用的 Net::HTTP、Net::HTTPS 和 Net::FTP 包装器。 可以像打开文件一样打开 http、https 或 ftp URL,因此您需要require 'open-uri'

    在添加require 'open-uri'时,Nokogiri 能够抓取该网站。

    【讨论】:

      【解决方案3】:

      在我的情况下(使用 brew 安装 ruby​​),我执行这些步骤以使 open() 正常工作

      require 'open-uri'
      
      # to get a TempFile object
      URI.open("http://www.google.com")
      
      # to get string of html
      URI.open("http://www.google.com").read
      

      我从https://ruby-doc.org/stdlib-2.6.3/libdoc/open-uri/rdoc/OpenURI.html 的文档中得到这个

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        • 2014-10-23
        • 2021-06-24
        • 2015-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多