操作
致命的 #578
完了ruby-2.0.0p0にてタイムラインが表示されない
開始日:
2013-03-17
期日:
進捗率:
0%
プラグイン名:
説明
ruby-2.0.0p0 + ruby-gtk2 1.2.3の環境にてタイムラインが一切表示されない。
net/httpライブラリの以下のような仕様変更により、2.0からは
TCPSocket.openの第3,4引数にローカルホストのホスト名とポート番号を渡す
ことが可能になった。
- 1.9: TCPSocket.open(conn_address(), conn_port())
- 2.0: sock = TCPSocket.open(conn_address, conn_port, @local_host, @local_port)
@local_hostと@local_portは通常デフォルトでnilが設定されている。
ここでresolv-replaceライブラリを使用すると、TCPSocketライブラリ
のリゾルバにrubyのResolvクラスを使用するようになるが、
Resolv::DNS::Name.createでは引数がnilの場合例外として処理される。
irb(main):003:0> Resolv::DNS::Name.create("hachune.net") => #<Resolv::DNS::Name: hachune.net> irb(main):004:0> Resolv::DNS::Name.create(nil) ArgumentError: cannot interpret as DNS name: nil from /usr/lib/ruby/1.9.1/resolv.rb:1144:in `create' from (irb):4 from /usr/bin/irb:12:in `<main>'
よって、resolv-replaceライブラリをrequireした時点で@local_hostが未指定
(nilのまま)だと例外が発生し、core/lib/mikutwitter/connect.rbの
MikuTwitter::APIShortcuts.connectが異常終了する。
miku@hachune% ruby20 -r socket -e 'p TCPSocket.open("mikutter.hachune.net", 80, nil, nil)' #<TCPSocket:fd 5> miku@hachune% ruby20 -r socket -r resolv-replace -e 'p TCPSocket.open("mikutter.hachune.net", 80, nil, nil)' /usr/ruby20/lib/ruby/2.0.0/resolv.rb:1176:in `create': cannot interpret as DNS name: nil (ArgumentError) from /usr/ruby20/lib/ruby/2.0.0/resolv.rb:1022:in `generate_candidates' from /usr/ruby20/lib/ruby/2.0.0/resolv.rb:1047:in `resolv' from /usr/ruby20/lib/ruby/2.0.0/resolv.rb:513:in `each_resource' from /usr/ruby20/lib/ruby/2.0.0/resolv.rb:406:in `each_address' from /usr/ruby20/lib/ruby/2.0.0/resolv.rb:115:in `block in each_address' from /usr/ruby20/lib/ruby/2.0.0/resolv.rb:114:in `each' from /usr/ruby20/lib/ruby/2.0.0/resolv.rb:114:in `each_address' from /usr/ruby20/lib/ruby/2.0.0/resolv.rb:92:in `getaddress' from /usr/ruby20/lib/ruby/2.0.0/resolv.rb:43:in `getaddress' from /usr/ruby20/lib/ruby/2.0.0/resolv-replace.rb:10:in `getaddress' from /usr/ruby20/lib/ruby/2.0.0/resolv-replace.rb:22:in `initialize' from -e:1:in `open' from -e:1:in `<main>'
操作