Почему WEBrick так медленно обрабатывает мой запрос в OSX? - PullRequest
3 голосов
/ 11 марта 2012

Я создал базовое демонстрационное приложение в Rails 3.2.2 с помощью rails new demo.Затем мне добавили контроллер с единственным методом, который отображает представление.На рендеринг страницы уходит в среднем более 20 секунд.Это, очевидно, делает невозможным развитие, поэтому я пытаюсь выяснить, почему и как я могу это исправить.

Я должен упомянуть, что я на Macbook Air 2011 с 4 ГБ ОЗУ и дисководом SSDпоэтому я не думаю, что мое оборудование как-то связано с этой проблемой.

Запуск OSX Lion, Rails 3.2.2 и Ruby 1.9.3.Локальный запуск через WEBrick

Обновление

Внесенные мной изменения only включают rails generator Say hello goodbye.

Затем я изменил hello.html.erb доскажем Hello World!

Вот мой гемфайл:

source 'https://rubygems.org'

gem 'rails', '3.2.2'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

Запустил сервер, набрав rails server

Обновление 2

Заметил эту странность вокно терминала .. от начала GET до GET первого актива требуется 8 секунд.

Started GET "/say/hello" for 127.0.0.1 at 2012-03-10 22:49:12 -0700
Processing by SayController#hello as HTML
  Rendered say/hello.html.erb within layouts/application (0.1ms)
Completed 200 OK in 5ms (Views: 5.3ms | ActiveRecord: 0.0ms)


Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2012-03-10 22:49:20 -0700
Served asset /application.css - 200 OK (0ms)

ТО еще 4 секунды для следующего актива ..

Started GET "/assets/say.css?body=1" for 127.0.0.1 at 2012-03-10 22:49:24 -0700
Served asset /say.css - 200 OK (0ms)

ОБНОВЛЕНИЕ3.1

Я отследил проблему до WEBrick.Вместо этого я установил и использовал thin, и мои звонки выполняются очень быстро, как и ожидалось.Было бы неплохо отследить, в чем проблема, если проблема WEBrick является признаком более серьезной проблемы.

Ответы [ 7 ]

3 голосов
/ 16 марта 2012

Не совсем ответ, но может помочь локализовать проблему:

попробуйте другой сервер, например "thin" или "pow" http://pow.cx/ (кстати: pow полностью раскачивается! , и рассмотрите возможность установки гема powder, который дает хорошие инструменты командной строки .) Pow очень прост в установке.

Кроме того, проверьте использование памяти с помощью приложения «Монитор активности» - 4 ГБ звучат как много, но могут очень быстро привыкнуть. Но я работаю в той же среде и не имею проблемы.

Не думаю, что это проблема компиляции ресурсов - с безупречно чистым Rails-приложением не нужно много компилировать. Но время - это что-то вроде проклятия - возможно, проверьте, какой процесс перегревает процессор (или, возможно, диск) во время ожидания. Вы можете исключить конвейер активов, установив config.assets.enabled = false в вашем application.rb.

Еще одна вещь, которую нужно проверить: у вас последняя версия ruby ​​1.9.3 - я видел странные вещи на 1.9.3-p0 и сейчас использую 1.9.3-p125, и все хорошо.

И еще одна вещь, которую нужно проверить: используйте curl или wget из командной строки, чтобы отдельно запросить страницу у самих ресурсов.

О, а вы используете Time Machine? Моя машина иногда сильно раздражает, когда работает. Не должно быть такой же проблемой с SSD, но ... кто знает.

2 голосов
/ 17 марта 2012

У меня была похожая проблема, но я не уверен, что решение будет применимо и к вам. Моя проблема была в основном связана с ненужными обратными поисками. Посмотрите на этот вопрос, так как он может помочь: Уэбрик очень медленно отвечает. Как это ускорить?

2 голосов
/ 16 марта 2012

+ 1 для вопроса прекомпиляции активов

Я постараюсь ответить, как вы можете это исправить (у меня была такая же проблема, пока я не нашел это решение):

group :development do
    gem 'rails-dev-tweaks', '~> 0.5.1' #nice gem to speedup development process
end

это мне очень помогло

Хорошим подходом может быть также использование passenger + nginx для разработки (для меня это ускорило отрисовку страниц примерно на 30-40% по сравнению с webrick)

надеюсь, что это помогло

1 голос
/ 11 марта 2012

Я предполагаю, что каждый раз, когда происходит какая-то компиляция или копирование актива.

Я бы попробовал изменить компиляцию актива в качестве теста -

В Rails 3.1 конвейер актива включенпо умолчанию.Его можно отключить в config / application.rb, поместив эту строку в определение класса приложения: config.assets.enabled = false

Мне было бы очень интересно узнать, есть ли у вас большое (или большое число)из) изображений или других медиаресурсов.

0 голосов
/ 01 апреля 2015

WEBrick по умолчанию выполняет обратный поиск DNS при подключении IP-адресов. Другими словами, он пытается увидеть, связан ли ваш IP-адрес с доменным именем. Это не нужно и занимает слишком много времени, поэтому вы можете отключить его.

Откройте файл «l / ruby ​​/ lib / ruby ​​/ 1.9.1 / webrick / config.rb» и найдите строку с помощью «: DoNotReverseLookup => nil». Измените nil на true.

Наслаждайтесь!

0 голосов
/ 20 марта 2012

У меня была такая же проблема ... кто-нибудь нашел решение, поэтому я перешел на Mongrel.

Вот ссылка с инструкцией

0 голосов
/ 20 марта 2012

Это так же медленно, используя тонкий?

В вашем Gemfile ..

gem 'thin'

Я начал использовать thin, чтобы убедиться, что соответствую своей производственной среде, и обнаружил, что он работает немного быстрее (хотя я никогда не видел ничего такогомедленно, как 20 секунд ..)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...