Webrick очень медленно реагирует. Как ускорить его?

У меня есть приложение Rails, которое я запускаю на своем сервере. Когда я перехожу на удаленный рабочий стол и пытаюсь загрузить приложение, сервер получает хорошие 3-4 минуты, чтобы ответить простой HTML-страницей. Однако, когда я загружаю страницу локально на сервер, страница отображается всего за секунду. Я пробовал пинговать сервер с моего удаленного рабочего стола, и пинги проходят успешно в течение разумного промежутка времени.

Кажется, все это началось после того, как я установил базовый клиент Oracle и SQLPLUS. Должен ли я подозревать Oracle? Кто-нибудь испытал что-то подобное этому?

    Здесь есть одна и та же проблема (даже год спустя). Под linux вы должны сделать следующее:

    Найдите файл /usr/lib/ruby/1.9.1/webrick/config.rb и отредактируйте его.

    Заменить линию

    :DoNotReverseLookup => nil, 

    с

     :DoNotReverseLookup => true, 

    Перезапустите webrick, и он будет работать как шарм 🙂

    Имела та же проблема. Для меня этот пост принял решение. Если вы на Ubuntu, остановите (или удалите) avahi-daemon . service avahi-daemon stop останавливает демон.

    Сейчас Webrick чувствует себя очень быстро.

    У проблемы есть старый отчет в Rails Lighthouse , однако Ruby-on-Rails переместили свои билеты в github с тех пор; К сожалению, эта старая проблема сохраняется.

    Имейте в avahi-daemon , что если вы на самом деле используете avahi-daemon для чего-то, например, найти принтеры и сканеры в вашей сети, это больше не будет работать.

    Просто была та же проблема.

     ... :DoNotReverseLookup => true, ... 

    сделал трюк для меня тоже. На всякий случай, когда вы запускаете ruby под rvm, вот путь:

     ~/.rvm/rubies/ruby-/lib/ruby//webrick/config.rb 

    «Тонкий» теперь отличный вариант для запуска как локально и на Хереку :

    На Heroku: https://devcenter.heroku.com/articles/rails3#webserver

    Веб-сайт: http://code.macournoyer.com/thin/

    Вы можете использовать его локально, вставив в свой Gemfile:

     gem "thin" 

    … а затем запустите пакет и запустите свой сервер с thin start или rails s .

    Обновление по Heroku

    Тонкий теперь считается плохим выбором для Heroku. Дополнительная информация здесь:

    https://blog.heroku.com/archives/2013/4/3/routing_and_web_performance_on_heroku_a_faq

    Их рекомендация:

    Переключитесь на параллельный веб-сервер, такой как Unicorn или Puma на JRuby, который позволяет dyno управлять собственной очереди запросов и избегать блокировки длинных запросов.

    У меня была смутно подобная проблема, которая проявилась при доступе к серверу WEBrick через VPN. Запросы занимают много времени, большинство из них ничего не происходит на проводе. Так как ни один mongrel или thin драгоценные камни не работали с Ruby1.9 на Windows, и я никак не мог ввязываться в компиляцию из источника, мне нужно было придерживаться WEBrick.

    Исправление заключалось в том, чтобы установить параметр конфигурации DoNotReverseLookup в true при создании сервера WEBrick:

     server = HTTPServer.new {:DoNotReverseLookup => true, ...} 

    Вы можете использовать Apache или установить Thin . В вашем Gemfile: gem 'thin'

    Или вы можете проверить список веб-серверов для рельсов .

    Пытался сделать это с помощью webrick на 1.8.7 и не смог найти конфигурацию для изменения. Тем не менее, чит, который вы можете использовать, заключается в добавлении в файл hosts сервера, на котором выполняется webrick ip-адрес, который он пытается отменить.

    Синатра часто испытывала задержки в 10 секунд. Этот fragment решил это для меня.

    Добавьте это в app.rb файла app.rb

     class Rack::Handler::WEBrick class << self alias_method :run_original, :run end def self.run(app, options={}) options[:DoNotReverseLookup] = true run_original(app, options) end end 

    См. Источник

    Это старый вопрос и ответ, который помог мне решить проблему :DoNotReverseLookup на локальной виртуальной машине разработки и хотел добавить дополнительную информацию. На этой веб-странице объясняется ошибка регрессии в ядре Ruby, которая приводит к появлению этой проблемы для некоторых; акцент мой; длинный недостаток всего этого заключается в том, что есть запрос на получение GitHub для исправления ядра Ruby, и, надеюсь, он будет одобрен и объединен в скором выпуске Ruby:

    После нескольких часов устранения неполадок выяснилось, что это было! По-видимому, где-то вдоль эволюции стандартной :DoNotReverseLookup 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: Исправить ошибку регрессии в версии WEBrick: DoNotReverseLookup для варианта конфигурации # 731

    Решение, описанное в запросе, заключается в том, чтобы изменить строку 181 в lib/webrick/server.rb следующим образом:

     sock.do_not_reverse_lookup = config[:DoNotReverseLookup] 

    К этому:

     unless config[:DoNotReverseLookup].nil? 

    Разделяйте здесь, если кто-то наткнется на эту хорошо рассмотренную тему вопроса / ответа и заинтересованы в прогрессе в решении этой проблемы в ядре Ruby. Надеемся, что это притяжение будет объединено или основной вопрос будет рассмотрен каким-то образом в следующем выпуске Ruby; возможно, 2.1.6?

    Это очень поздний ответ, но я потратил большую часть дня на отладку этой самой проблемы с Rails, запущенным на Vagrant. Изменение обратного DNS-поиска фактически не улучшало время запроса. Сочетание двух вещей потребовало загрузки моей страницы от ~ 20 секунд до ~ 3 секунд в режиме разработки:

    Замените WEBrick на mongrel. Мне пришлось использовать предварительную версию, иначе она не будет установлена:

     sudo gem install mongrel --pre 

    Затем добавьте его в мой Gemfile для dev:

     group :test, :development do gem 'mongrel' end 

    Тогда начался мой сервер:

     rails server mongrel -e development 

    Это сократилось на несколько секунд, 5 или 6 секунд, но все еще было очень медленно. Это была обледенение на торте – добавьте это также в Gemfile:

     group :development do gem 'rails-dev-boost', :git => 'git://github.com/thedarkone/rails-dev-boost.git' end 

    Нет опции DoNotReverseLookup в rubyе 1.8.x webrick. Решение состоит в том, чтобы поставить:

     Socket.do_not_reverse_lookup = true 

    где-то в начале вашего скрипта.

    Источник: WEBrick и Socket.do_not_reverse_lookup: Сказка в двух действиях

    В моей, вероятно, редкой ситуации, это работало после того, как я сбросил мои iptables, у этого не было никаких побочных эффектов, потому что у меня не было никаких пользовательских правил (только по умолчанию Ubuntu разрешает все):

     sudo iptables -F 
    Interesting Posts

    SwingWorker не обновляет JProgressBar без Thread.sleep () в пользовательской диалоговой панели

    HttpURLConnection для отправки изображений, аудио и видео файлов с параметром может (String или Json String) Android

    FIND_IN_SET () vs IN ()

    Как передать свойства -D системы во время тестирования на Eclipse?

    Как получить Url Hash (#) со стороны сервера

    Поиск NSArray для значения соответствия значений

    Java: Локальная переменная mi, определенная в охватывающей области, должна быть окончательной или эффективно конечной

    Инструменты для поиска включенных заголовков, которые не используются?

    Как вы создаете разные имена переменных в цикле?

    Firebase Android: как читать из разных ссылок последовательно

    Можно ли удалить или отключить iTunes в OS X?

    Как обмениваться данными с двумя (2) classами SwingWorker в Java

    Как я могу отложить завернутый текст в Notepad ++?

    Использование iTextPDF для обрезки простыни страницы

    Угловой2 Быстрый запуск npm не работает правильно

    Давайте будем гением компьютера.