6
3

More than 1 year has passed since last update.

open(url)で起きたエラー

Last updated at Posted at 2022-05-09

No such file or directory @ rb_sysopen - URL (Errno::ENOENT)

開発環境

使用しているpcのスペック:
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports)
macOS Monterey バージョン 12.3.1

使用しているrubyのversion:
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-darwin21]

require 'open-uri'
require 'nokogiri'

url = 'http://www.yahoo.co.jp/'
charset = nil
html = URI.open(url) do |f|
  charset = f.charset
  f.read
end

doc = Nokogiri::HTML.parse(html, nil, charset)
p doc.title

上記のようなyahooのページタイトルを表示させるrubyのプログラムを動かすと,以下のようなエラーが起きた.

scrape_yahoo_title.rb:11:in `initialize': No such file or directory @ rb_sysopen - http://www.yahoo.co.jp/ (Errno::ENOENT)
        from scrape_yahoo_title.rb:11:in `open'
        from scrape_yahoo_title.rb:11:in `<main>'

実行したこと

html = open(url) do |f|

という1文を

html = URI.open(url) do |f|

のように,open(url)の前にURIをつけると,プログラムが動いた.

エラーの原因

Ruby3.0.3下では,open-uriライブラリはopenメソッドを用いるとエラーが出るようだ.openの代わりにURI.openを使うとエラーが起きない.
Ruby 3.0.0 リリース(https://www.ruby-lang.org/ja/news/2020/12/25/ruby-3-0-0-released/
)を見ると,「原則として,2.7 で警告の出ていたコードは動かなくなります。」と記述されいた.そこで詳しくニュースファイル (https://github.com/ruby/ruby/blob/v3_0_0/NEWS.md)
をみて見ると,「Requiring 'open-uri' no longer redefines Kernel#open. Call URI.open directly or use URI#open instead.」と記述してあり,Ruby 3.0.0から,urlを開くためにopenメソッドは使えない.

以下は,rubyのOpenURIのリファレンス

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3