資料
-sparklemotion/mechanize: Mechanize is a ruby library that makes automated web interaction easy.
--https://github.com/sparklemotion/mechanize
-RDoc Documentation
--http://docs.seattlerb.org/mechanize/
-mechanize | RubyGems.org | your community gem host
--https://rubygems.org/gems/mechanize
-Mechanize - Ruby Mechanize wiki (ja)
--http://seesaawiki.jp/ruby_mechanize/d/Mechanize
-Rails スクレイピング手法 Mechanizeの使い方 - Qiita
--https://qiita.com/shizuma/items/d04facaa732f606f00ff
-Ruby Mechanize スクレイピングでよく使う設定やメソッドをクラス定義して使い回す - Qiita
--https://qiita.com/arribux/items/1cb2c175e68da8a48c3a
タイムアウト設定
-class Mechanize - RDoc Documentation
--http://docs.seattlerb.org/mechanize/Mechanize.html
-->open_timeout=(open_timeout)
-->Sets the connection open timeout to open_timeout
--
-->read_timeout=(read_timeout)
-->Sets the timeout for each chunk of data read from the server to read_timeout. A single request may read many chunks of data.
-ruby のmechanizeで特定時間でアクセスをやめる方法: Timeoutの設定 - arupaka-_-arupakaの日記
--http://d.hatena.ne.jp/arupaka-_-arupaka/20120820/1345442274
-open-uriにtimeoutを設定する方法 | Pistolfly
--https://www.pistolfly.com/weblog/2011/06/open-uritimeout.html
-->timeout による割り込みはRubyのThreadによって実現されており、C言語レベルで実装されRuby のスレッドが割り込めない処理では無効なので、SocketでDNSの名前解決に時間がかかった場合にタイムアウトしない。そのため、resolvライブラリを使うようにresolv-replaceでメソッドの書き換えを行う。
-やむにやまれず : open-uriにtimeoutを設定する方法
--http://blog.livedoor.jp/sparklegate/archives/50318006.html
-->RubyのThreadは、インタプリタがユーザモードで動くプリエンプティブな性質を作っているが、それを動かすC言語のレベルではノンプリエンプティブなので、gethostbynameはユーザモードで動くRubyのThread切り替えが機能しない。
-->timeout.rbは、RubyのThreadを起こしているので、gethostbynameがタイムアウトし、プリエンプティブな処理が可能になって初めてタイムアウトを捕捉するようになるわけです。
-->つまり、この手の機能はCのライブラリに実装を依存させず、Rubyで記述すれば解決する。
-->それが冒頭のrequire 'resolv-replace'になります。