From: Nobuyoshi Nakada Date: 2011-12-22T10:18:09+09:00 Subject: [ruby-dev:45027] Re: [ruby-trunk - Bug #5786] LoadError: cannot load such file -- openssl なかだです。 (11/12/22 0:32), Kazuhiro NISHIYAMA wrote: > % git grep -n 'autoload.*openssl' > lib/net/http.rb:24:autoload :OpenSSL, 'openssl' > % > で autoload が設定されていて、 > lib/securerandom.rb:59: if defined? OpenSSL::Random > の defined? で LoadError になってしまうのが原因のようです。 > autoload と defined? の組み合わせは以下のようにバージョン毎に微妙に挙動が違うようです。 > > % cat /tmp/test.rb > autoload :OpenSSL, 'openssl' > p defined?(OpenSSL) > p defined?(OpenSSL::Random) > % ./ruby -v /tmp/test.rb > ruby 1.8.7 (2011-12-10 patchlevel 356) [x86_64-linux] > "constant" > "constant" > % cd $(\ls -1d /home/chkbuild/tmp/build/ruby-1.9.2/*|tail -n1)/bin > % ./ruby -v /tmp/test.rb > ruby 1.9.2p312 (2011-12-18 revision 34062) [x86_64-linux] > nil > nil > % cd $(\ls -1d /home/chkbuild/tmp/build/ruby-1.9.3/*|tail -n1)/bin > % ./ruby -v /tmp/test.rb > ruby 1.9.3p6 (2011-12-20 revision 34080) [x86_64-linux] > "constant" > "constant" > % cd $(\ls -1d /home/chkbuild/tmp/build/ruby-trunk/*|tail -n1)/bin > % ./ruby -v /tmp/test.rb > ruby 2.0.0dev (2011-12-21 trunk 34088) [x86_64-linux] > "constant" > "constant" これは、1.9からautoloadされる定数がdefined?でnilになるというバグがあっ たので1.9.3で直したのですが、そのときに定数のdefined?で例外が起きないと いう(1.9.0で導入された誤った)仮定にそぐわなくなったためです。おそらく最 右辺以外の定数参照にISEQ_TYPE_DEFINED_GUARDを付ける必要があるのではない かと思います。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦