To jest stary wątek z pytaniami i odpowiedziami, który pomógł mi rozwiązać :DoNotReverseLookup
problem na lokalnej maszynie wirtualnej programowania i chciał dodać dodatkowe informacje. Ta strona internetowa wyjaśnia błąd regresji w rdzeniu Ruby, który doprowadził do pojawienia się tego problemu; nacisk jest mój; Krótko mówiąc, istnieje żądanie ściągnięcia GitHub dotyczące poprawki rdzenia Rubiego i miejmy nadzieję, że zostanie ono zatwierdzone i włączone do wkrótce wydanej wersji Rubiego:
Po kilku godzinach rozwiązywania problemów okazało się, że tak! Wygląda na to, że gdzieś w trakcie ewolucji standardowej biblioteki Ruby z 1.8.6 do 2.0.0, WEBrick nabył nową opcję konfiguracji, :DoNotReverseLookup
która jest nil
domyślnie ustawiona . Następnie, głęboko w trzewiach kodu przetwarzania żądań WEBrick, ustawia
do_not_reverse_lookup
flagę dla wystąpienia gniazda połączenia przychodzącego na wartość config[:DoNotReverseLookup]
. Ponieważ ta wartość jest nil
fałszywa, efekt jest taki sam, jak ustawienie jej na false
, przesłaniając Socket.do_not_reverse_lookup
flagę globalną . Tak więc, jeśli nie masz: DoNotReverseLookup => true
w konfiguracji WEBrick odwrotne wyszukiwanie DNS będzie zawsze odbywać się dla każdego nowego połączenia, potencjalnie powodując poważne opóźnienia.
Związane z tym odkryciem jest żądanie ściągnięcia GitHub od autora, proponujące, jak naprawić problem w kodzie źródłowym Ruby WEBrick: Napraw błąd regresji w WEBrick's: implementacja opcji konfiguracji DoNotReverseLookup # 731
Rozwiązaniem przedstawionym w żądaniu jest zmiana wiersza 181 lib/webrick/server.rb
z tego:
sock.do_not_reverse_lookup = config[:DoNotReverseLookup]
Do tego:
unless config[:DoNotReverseLookup].nil?
Udostępniam tutaj, jeśli ktoś natknie się na ten dobrze traktowany wątek pytań / odpowiedzi i jest zainteresowany postępem w rozwiązywaniu tego problemu w rdzeniu Ruby. Miejmy nadzieję, że to przyciąganie zostanie scalone lub podstawowa kwestia zostanie w jakiś sposób rozwiązana w następnym wydaniu Rubiego; może 2.1.6?