Время запуска сервера приложений Rails 3 велико - PullRequest
18 голосов
/ 17 августа 2010

ОБНОВЛЕНИЕ 2 Это известная ошибка / функция, связанная с тем, как Ruby 1.9.2 загружает файлы. http://twitter.com/#!/rails/status/72801149769621504

обновление: Это началось как вопрос, но, поработав над этим немного, я думаю, что это может быть невозможно исправить. Я решил опубликовать это на тот случай, если кто-то еще увидит то же самое и задается вопросом, что происходит внутри рельсов и связок.

Кто-нибудь еще видит долгое время загрузки в своих приложениях на Rails 3? Я поместил таймеры в environment.rb, application.rb, boot.rb и railties / lib / rails / initializable.rb. Время измеряется в секундах, а прошедшее время - это время с момента последнего записанного времени. Время загрузки продукции занимает немного больше времени. Частично из-за меньшего количества оборудования, а также из-за eager_load! (а может быть из Тонкого против Монгреля). Похоже, что Bundler занимает большую часть времени загрузки, и я предполагаю, что этого следовало ожидать. Я протестировал одно из приложений в dev и prod и одно пустое приложение в dev. Я проверил 2 сервера приложений только для того, чтобы убедиться, что он был Тонким. Я также вижу похожие вещи с Passenger в prod (что делает его непригодным к использованию из-за нереста в 2.2.15). Я тестировал на краевых Rails, а производительность в dev была немного хуже - 14,5 с против 14,2 с. Если я удаляю свои тестовые зависимости, это экономит 2-3 секунды, но это не помогает, когда я запускаю тесты. Я думаю, это немного раздражает - ждать 5 минут, пока все мои экземпляры Thin перезагружаются, а также ждать 15 секунд, прежде чем мои тесты запускаются, но на данный момент это приемлемый компромисс из-за производительности, которую я получаю с Rails 3. Если кто-то идеи, чтобы помочь ускорить вещи, я все уши. Вот результаты теста:

Примечание: мое приложение в Rails 2.3 загрузилось менее чем за 3 секунды в dev (хотя я немного преобразовал код в движки и добавил гемы haml и twitter_oauth после перехода на rails3)

** Все тесты проведены с Rails 3RC и Ruby 1.9.2rc2

Prod with Thin - CentOS 5.5, Rackspace, облачный сервер, 2 ГБ, экземпляр
Тестовое приложение № 1 с 24 зависимостями гемов

start env.rb - Total=0
  start app.rb - 0.00110546 elapsed.  Total=0.001180052  
    start boot.rb - 0.000600488 elapsed.  Total=0.00178644    
    end boot.rb - 0.7935529 elapsed.  Total=0.795507318  
    start require rails/all - 0.000189127 elapsed.  Total=0.795701199  
    end require rails/all - <b>1.086998364</b> elapsed.  Total=1.882735263  
    start Bundler require - 0.000109708 elapsed.  Total=1.88285043  
    end Bundler require - <b>8.955853243</b> elapsed.  Total=10.838746673  
  end app.rb - 0.062975913 elapsed.  Total=10.901753753  
  # /railties-3.0.0.rc/lib/rails/initializable.rb 
  start run initializers - 0.000145906 elapsed.  Total=10.901910186  
    load_environment_config - 0.116689774 elapsed.  Total=11.018632298  
    initialize_cache - 0.246161343 elapsed.  Total=11.320543397  
    active_record.initialize_database - 0.080047485 elapsed.  Total=11.400961893  
    bootstrap_hook - 1.034189984 elapsed.  Total=12.451309104  
    active_support.initialize_time_zone - 1.969821814 elapsed.  Total=14.448777651  
    action_controller.set_configs - 0.594991537 elapsed.  Total=15.044692126  
    will_paginate.active_record - 0.324460921 elapsed.  Total=15.386837641  
    will_paginate.action_view - <b>1.904889132</b> elapsed.  Total=17.328981523  
    add_view_paths - 0.087811847 elapsed.  Total=17.42011881  
    load_init_rb - 0.151282681 elapsed.  Total=17.709093173  
    load_init_rb - 0.362241273 elapsed.  Total=18.071865548  
    load_config_initializers - 0.144051305 elapsed.  Total=18.217433492  
    build_middleware_stack - <b>2.569453884</b> elapsed.  Total=20.826842081  
    eager_load! - <b>4.165919064</b> elapsed.  Total=24.99280168  
    finisher_hook - 0.48795935 elapsed.  Total=25.480807439  
    repopulate_roles - 0.504085662 elapsed.  Total=25.984901297  
  end run initializers - ~0.00005 elapsed.  Total=25.985617783  
end env.rb - ~0.00006 elapsed.  Total=25.985683903  

Dev с Mongrel - Max OSX 10.5.8, 2.66 Core2duo, 4 ГБ ОЗУ
Тестовое приложение №1 с 24 зависимостями гемов

start boot.rb (Bundler.setup) - 2.0e-05 elapsed.  Total=3.1e-05  
end boot.rb (Bundler.setup) - <b>2.352435</b> elapsed.  Total=2.352915  
start app.rb - 0.084945 elapsed.  Total=2.437866  
  start require rails/all - 0.000181 elapsed.  Total=2.438049  
  end require rails/all - 0.489425 elapsed.  Total=2.927485  
  start Bundler.require(:default, Rails.env) - 5.6e-05 elapsed.  Total=2.927544  
  end Bundler.require(:default, Rails.env) - <b>5.16162</b> elapsed.  Total=8.089177  
end app.rb - 0.025972 elapsed.  Total=8.11516  
start env.rb - 0.084153 elapsed.  Total=8.199329 
  # /railties-3.0.0.rc/lib/rails/initializable.rb 
  start run_initializers - 0.002709 elapsed.  Total=8.202042   
    initialize_cache - 0.089231 elapsed.  Total=8.518005  
    bootstrap_hook - 0.602342 elapsed.  Total=9.192564  
    active_support.initialize_time_zone - <b>0.901676</b> elapsed.  Total=10.10115  
    action_controller.set_configs - 0.375864 elapsed.  Total=10.477565  
    will_paginate.active_record - 0.207447 elapsed.  Total=10.694479  
    will_paginate.action_view - <b>1.041412</b> elapsed.  Total=11.75974  
    load_init_rb - 0.051938 elapsed.  Total=11.879547  
    load_init_rb - 0.082936 elapsed.  Total=12.001311  
    load_init_rb - 0.18798 elapsed.  Total=12.189555  
    load_config_initializers - 0.079461 elapsed.  Total=12.269971  
    build_middleware_stack - <b>1.390042</b> elapsed.  Total=13.729273  
    finisher_hook - 0.082274 elapsed.  Total=13.811648  
    repopulate_roles - 0.350287 elapsed.  Total=14.161941  
  end run_initializers - 3.0e-06 elapsed.  Total=14.177869  
end env.rb - 0.000127 elapsed.  Total=14.178002  

Дев с дворняжкой Тестовое приложение № 2 с 2 зависимостями гемов

start boot.rb (Bundler.setup) - Total=0
end boot.rb (Bundler.setup) - <b>1.724158</b> elapsed.  Total=1.724199
start app.rb - 0.041006 elapsed.  Total=1.765211
  start require rails - 0.000151 elapsed.  Total=1.765364
  end require rails - 0.360051 elapsed.  Total=2.125426
  start Bundler.require(:default, Rails.env) - 5.5e-05 elapsed.  Total=2.125485
  end Bundler.require(:default, Rails.env) - 0.008396 elapsed.  Total=2.133889
end app.rb - 0.007805 elapsed.  Total=2.141704
start env.rb - 0.16541 elapsed.  Total=2.307128
  start run_initializers - 0.00031 elapsed.  Total=2.307442
    load_active_support - 0.24045 elapsed.  Total=2.579421
    active_support.initialize_time_zone - 0.206237 elapsed.  Total=2.837663
    action_controller.deprecated_routes - 0.210291 elapsed.  Total=3.048634
    build_middleware_stack - 0.220663 elapsed.  Total=3.273035
  end run_initializers - 3.0e-06 elapsed.  Total=3.29339
end env.rb - 8.7e-05 elapsed.  Total=3.293483

Ответы [ 3 ]

2 голосов
/ 16 октября 2010

Bundler часто тратит более половины своего времени на драгоценные камни. Есть ли ненужные зависимости, которые вы загружаете в режиме разработки / тестирования? Например, некоторые из моих драгоценных камней используются только работниками resque или другими скриптами. Вы можете добавить :require => false, а затем вручную запрашивать их, когда они нужны для небольшого увеличения скорости запуска в режиме разработки / тестирования.

Прежде чем сделать это, я обычно профилирую операторы require (в lib / bundler / runtime.rb), чтобы посмотреть, действительно ли их стоит удалить.

2 голосов
/ 20 сентября 2010

Так как это довольно старый вопрос: тестировали ли вы его с релизной версией Rails 3?

Это долго, но в конечном итоге бессмысленно.Мои приложения rails работают несколько месяцев подряд, что составляет долю от 1 процента от общего времени выполнения.

У вас есть тонна зависимостей, с которыми приходится сталкиваться Bundler?Я могу запустить приложение Rails 3 менее чем за 2 секунды в любой среде, но использую очень мало сторонних гемов.

0 голосов
/ 13 апреля 2011

У меня есть 3 рельса 3 приложения, и я перенес одно из 2.3.8, одно на рельсах 2.3.8 загружается за 4 секунды, а ветвь, которая находится на полпути в рельсах 3, занимает 12 секунд, все остальные проекты рельсов 3загрузка занимает от 20 до 30 секунд, это очень удручает, когда я вижу скринкаст, где кто-то загружает свое приложение rails за 3 секунды, я дергал себя за волосы с тех пор, как перешел на rails 3, думая, что это мое окружение.

...