首页 > 解决方案 > 无法使用 Ruby Errno::ENOENT 打开文件:没有这样的文件或目录 @ rb_sysopen

问题描述

使用 Ruby2.6.6我无法以常规方式打开文件。

2.6.6 :006 > File.open "https://www.pocket-rocket.io/robots.txt"
Traceback (most recent call last):
        7: from /Users/martinbraun/.rvm/rubies/ruby-2.6.6/bin/irb:23:in `<main>'
        6: from /Users/martinbraun/.rvm/rubies/ruby-2.6.6/bin/irb:23:in `load'
        5: from /Users/martinbraun/.rvm/rubies/ruby-2.6.6/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
        4: from (irb):6
        3: from (irb):6:in `rescue in irb_binding'
        2: from (irb):6:in `open'
        1: from (irb):6:in `initialize'
Errno::ENOENT (No such file or directory @ rb_sysopen - https://www.pocket-rocket.io/robots.txt)

该文件存在,我可以使用我的浏览器浏览到它。但我不断收到这个错误。

我试过了:

require 'open-uri'

没有成功。

我在这里做错了什么?这个 Ruby 版本可能有问题吗?我找不到任何提示。

标签: ruby

解决方案


File.open期望文件在磁盘上,它不适用于远程文件。

相反,您可以使用Net::HTTP.get,这将返回一个字符串。

 url = URI('https://www.pocket-rocket.io/robots.txt')
 Net::HTTP.get(url) # => "User-agent: *\nDisallow: /wp-admin/\nAllow: /wp-admin/admin-ajax.php\n"

推荐阅读