Ubuntu в Virtualbox - веб-сервер WEBrick работает очень медленно при использовании локального IP-адреса

Я использую Ubuntu (Lucid Lynx) для изучения Ruby On Rails. Я использую Ubuntu в VirtualBox (хост - Windows 7 Ultimate), используя мостовую сеть.

Когда я запускаю свое приложение Rails и указываю на него браузер с помощью localhost:3000, приложение немедленно отвечает, и моя страница отображается за секунду или две.

Однако, если я использую 10.0.0.5:3000 (где 10.0.0.5 - мой IP-адрес, о котором сообщается с помощью ifconfig), ответ от моего приложения rails невероятно медленный - возможно, 30 или более секунд, чтобы сервер ответил и отобразил страницу.

Это происходит как в Firefox, так и в Chrome. Кроме того, когда я запускаю приложение Rails с хоста (чтобы проверить его в IE), я получаю тот же отклик slooooooow.

Есть идеи, что может происходить? Я пробовал это с двумя различными маршрутизаторами, и в двух разных сетях (работа и дом) с тем же результатом.

Ура все.

6 ответов

Попробуйте запустить

sudo service avahi-daemon stop

Также попробуйте установить WEBrick /usr/lib/ruby//webrick/config.rb

:DoNotReverseLookup => true

Также см.: "Stackoverflow WEBrick медленно с удаленного рабочего стола"

Это проблема WEBrick, никаких проблем при использовании других веб-серверов.

Я попробовал Mongrel и Thin с Ruby on Rails 3.0.x, оба отлично работали.

Я предлагаю использовать Mongrel - просто добавьте его в свой Gemfile:

gem "mongrel"

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

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

Теперь запустите сервер так же, как вы делали это раньше, и Mongrel запускается вместо WEBrick.

Если вы предпочитаете Thin, вам нужно запустить сервер с thin start или WEBrick будет запущен.

Если вы используете WEBrick, вы можете попробовать использовать Thin. Добавьте тонкий в ваш Gemfile:

gem 'thin'

и установите его, запустив:

bundle

Запустите сервер, запустив:

thin start

У меня такая же проблема возникала как в VirtualBox, так и в VMware. Не уверен, в чем проблема... он действует так, как будто сервер Rails ищет что-то, что нужно отключить по тайм-ауту? Сервер Rails сообщает о быстром времени рендеринга в журнале, но реагирует на каждый запрос вечно. Происходит для меня как в Rails 2.3.8, так и в Rails 3.0.3 на одном конкретном экземпляре Ubuntu (пробовал как в VirtualBox, так и в VMware). У меня была другая Ubuntu VM на другом компьютере, у которого не было проблем...

После разочаровывающей погони за этим в течение некоторого времени я решил использовать Phusion Passenger в режиме разработки и Apache.

Этот действительно странный. Я обнаружил, что если я запускаю сервер rails из замазки, ответы гораздо быстрее, чем если бы я запускал его из окна VirtualBox...

Предупреждение: это не ответ (кроме предложения просто использовать Passenger), но я документирую свой собственный опыт, а также некоторые эксперименты, которые я провел, которые, надеюсь, помогут нам приблизиться к выводу.

У меня точно такая же проблема. Это произошло внезапно. У меня также есть подобное наблюдение с вами на фронте пинга. Мой гость Ubuntu также запускает обычный стек LAMP, и там нет абсолютно никаких проблем с обслуживанием. Для чего это стоит, кажется, unix_stream_data_wait это (в основном?) виноват в зависании. Я не могу разобрать, что это значит за тривиальным или как исследовать дальше.

Кажется, это не зависит от номера порта (перемещение рельсов на более низкий порт, как в rails s -p 30 не меняет проблему, и другие службы, настроенные на прослушивание порта 3000, не сталкиваются с такими же проблемами службы).

Это также, кажется, не зависит от кода приложения. Я попробовал это с голым приложением рельсов, и задержка появилась снова.

Задержка также, кажется, изменяется по продолжительности, что порождает потенциальную проблему с гипотезой, что Rails предсказуемо истекает.

Запросы, отправленные в одной и той же "партии", по-видимому, выполняются в одно и то же время. Это говорит о том, что что-то есть в интерфейсе между процессом Rails и сетевым обработчиком, где интерфейс просто чертовски медленен, но очищает его тарелку, когда транзакция в конце концов проходит.

В общем, странно, странно, странно.

Я просто пошел с пассажиром вместо.

Другие вопросы по тегам