Rails очень медленно инициализируется на ruby ​​1.9.1

Я только что запустил приложение rails 2.3.8 на ruby ​​1.9.1. Чтобы попасть в консоль, запустите веб-сервер, все, что инициализирует рельсы, в ruby ​​1.9 занимает в 3-4 раза больше времени, чем в ruby ​​1.8.7. Я использую менеджеры версий ruby, поэтому могу легко переключаться между ruby ​​1.9 и ruby ​​1.8.7. Разница в скорости происходит как в производстве, так и в разработке. Я хочу использовать 1.9, потому что он должен работать быстрее, когда все работает, но время запуска настолько плохое, что время ожидания приложения на Heroku истекает при первом запросе.

Есть идеи, почему ruby ​​1.9 будет в 3-4 раза медленнее? Я не могу понять это для жизни меня.


person Ben Johnson    schedule 26.05.2010    source источник
comment
Или выяснить, где он тратит свое время.   -  person Ben Johnson    schedule 26.05.2010
comment
Я подтвердил, что эта проблема существует с новым приложением rails. Так что это определенно не драгоценный камень или что-то конкретное для приложения.   -  person Ben Johnson    schedule 26.05.2010
comment
Когда вы говорите в 3-4 раза медленнее, сколько времени это занимает в секундах? Если ruby1.9 занимает 3 секунды, а ruby1.8 - 1 секунду, у вас, вероятно, другие проблемы, чем если ruby1.9 занимает 60 секунд, а ruby1.8 - 20 секунд!   -  person nfm    schedule 03.06.2010
comment
Я также заметил задержку ~ 2 секунды при первом запросе к моему собственному приложению, но я не думаю, что это приведет к тайм-аутам. Это может (это очень предварительное возможно) как-то связано с "автозагрузкой" по сравнению с "требованием" в библиотеке Rails. 'autoload' будет загружать данный файл только при доступе к связанной константе, так что это в основном ленивая загрузка. Если происходит много ленивой загрузки, это может что-то делать. Это действительно может быть проблемой, только если это всего лишь первый запрос, который занимает много времени. В противном случае просто продолжайте и игнорируйте меня.   -  person Twisol    schedule 05.06.2010
comment
Это происходит и локально?   -  person Shyam    schedule 08.06.2010
comment
После перехода на rails3/ruby19 среднее время загрузки среды rails составляет около 30 секунд по сравнению с 5 секундами, которое требуется для rails2/ruby18. Я сейчас пытаюсь использовать 1.9.2-head, чтобы посмотреть, есть ли улучшения.   -  person knoopx    schedule 10.12.2010


Ответы (2)


Попробуйте использовать 1.9.2-head вместо 1.9.1. Это рекомендуемая версия для Rails. 3, так что вам может повезти. Rails 2.3.8 запускается очень быстро на 1.9.2-head из тестов, которые я только что провел локально (кстати, с установленным Authlogic).

Если вы используете RVM, введите следующее:

rvm install 1.9.2-head
rvm use 1.9.2-head

Изменить: я попробовал 1.9.1 p378 с тем же приложением, и время запуска заняло около 13 секунд по сравнению с 5 секундами на 1.9.2-head. Версия 1.9.2-rc1 должна выйти в этом месяце, я полагаю, так что это хорошие новости :)

person Awgy    schedule 08.06.2010

Вероятно, это связано с тем, что ruby ​​1.9 использует gem_prelude (что дает вам большой путь загрузки) вместо обычных rubygems. Проверьте длину $: -- которая ищется один раз для каждого запроса, что приводит к дополнительному времени.

Если вы хотите по-старому (обновите до последней версии rubygems и) запустите ruby ​​--disable-gems

Если вы работаете в Windows, загляните в мой гем fast_require.

http://github.com/rdp/faster_require

Хотя я полагаю, теперь, когда вы упомянули об этом, это может помочь в 1.9 Linux. Может быть.

GL! -rp

person rogerdpack    schedule 21.06.2010