:DoNotReverseLookup
これは、ローカル開発仮想マシンの問題を解決するのに役立ち、追加情報を追加したいと思った古い質問と回答のスレッドです。この Web ページでは、この問題が発生する原因となった Ruby コアのリグレッション エラーについて説明しています。強調は私のものです。要するに、これに対する Ruby コアの修正を求める GitHub プル リクエストがあり、これが承認されてすぐにリリースされる Ruby にマージされることを願っています。
数時間のトラブルシューティングの後、そうであることが判明しました。どうやら、Ruby の標準ライブラリが 1.8.6 から 2.0.0 に進化する過程のどこかで、WEBrick はデフォルト:DoNotReverseLookup
で設定されている新しい構成オプションを獲得したようnil
です。次に、WEBrick のリクエスト処理コードの奥深くで
do_not_reverse_lookup
、着信接続ソケット インスタンスのフラグを の値に設定しconfig[:DoNotReverseLookup]
ます。この値はであるため、これは誤りであり、グローバルフラグをオーバーライドしnil
て に設定した場合と同じ効果があります。そのため、WEBrick 構成に : がない限り、新しい接続ごとに逆引き DNS ルックアップが常に発生し、重大な遅延が発生する可能性があります。false
Socket.do_not_reverse_lookup
DoNotReverseLookup => true
この発見に関連して、Ruby WEBrick ソース コードの問題を修復する方法を提案している著者からの GitHub プル リクエストがあります。
リクエストに記載されている解決策は、181 行目を次のように変更することlib/webrick/server.rb
です。
sock.do_not_reverse_lookup = config[:DoNotReverseLookup]
これに:
unless config[:DoNotReverseLookup].nil?
このよく知られた質疑応答スレッドに出くわし、Ruby コアでこの問題を解決するための進歩に興味がある人は、ここで共有してください。このプルがマージされるか、根本的な問題が Ruby の次のリリースで何らかの方法で処理されることを願っています。たぶん2.1.6?