Це стара тема запитань та відповідей, яка допомогла мені вирішити :DoNotReverseLookup
проблему на віртуальній машині локальної розробки та хотіла додати додаткову інформацію. Ця веб-сторінка пояснює помилку регресії в ядрі Ruby, яка призвела до появи цієї проблеми у деяких; наголос - це моє; довгий час не вистачає всього цього, є запит на витяг GitHub для виправлення основного Ruby, і ми сподіваємось, що він буде схвалений та об'єднаний у найближчому випуску Ruby:
Після кількох годин усунення несправностей виявилося, що це було! Очевидно, десь упродовж еволюції стандартної бібліотеки Ruby з 1.8.6 до 2.0.0 WEBrick придбав нову опцію конфігурації, :DoNotReverseLookup
яка встановлена nil
за замовчуванням. Потім, глибоко в нутрі коду обробки запитів WEBrick, він встановлює
do_not_reverse_lookup
прапорець на екземплярі сокета вхідного з'єднання значенням config[:DoNotReverseLookup]
. Оскільки це значення є nil
хибним, ефект такий самий, як і встановити його false
, замінюючи глобальний Socket.do_not_reverse_lookup
прапор. Отже, якщо у вас немає: DoNotReverseLookup => true
у вашій конфігурації WEBrick для кожного нового підключення завжди відбуватиметься зворотний пошук DNS, що може спричинити серйозні затримки.
З цим відкриттям пов’язаний запит на витяг GitHub від автора, який пропонує, як виправити проблему у вихідному коді Ruby WEBrick: Виправлена помилка регресії в реалізації параметра конфігурації DoNotReverseLookup # 731
Рішенням, як зазначено в запиті, є зміна рядка 181 на lib/webrick/server.rb
з цього:
sock.do_not_reverse_lookup = config[:DoNotReverseLookup]
До цього:
unless config[:DoNotReverseLookup].nil?
Поділіться тут, якщо хтось наткнеться на цю розглянуту нитку запитань / відповідей і зацікавлений у прогресі у вирішенні цієї проблеми в Ruby core. Будемо сподіватися, що цей витяг буде об’єднаний або основна проблема буде якось вирішена в наступному випуску Ruby; можливо 2.1.6?