El tiempo de inicio del servidor de aplicaciones Rails 3 es largo

ACTUALIZACIÓN 2 Esta es una característica / error conocido con la forma en que Ruby 1.9.2 carga archivos. http://twitter.com/#!/rails/status/72801149769621504

actualización: esto comenzó como una pregunta, pero después de trabajar en esto un poco, creo que podría no ser solucionable. Pensé que publicaría esto en caso de que alguien más estuviera viendo lo mismo y se esté preguntando qué está pasando dentro de los Rails y el bote.

¿Alguien más está viendo largos tiempos de carga en sus aplicaciones Rails 3? Coloqué los temporizadores en environment.rb, application.rb, boot.rb y railties / lib / rails / initializable.rb. El tiempo se mide en segundos y el tiempo transcurrido es el tiempo desde la última vez que se registró. El tiempo de carga de producción tarda un poco más. En parte debido a menos hardware y también de eager_load! (y tal vez de Thin vs Mongrel). Parece que Bundler está ocupando una gran parte del tiempo de carga y supongo que es de esperar. Probé una de las aplicaciones en dev y prod, y una aplicación en blanco en dev. Probé 2 servidores de aplicaciones solo para ver si era Thin lo que lo causaba. También estoy viendo cosas similares con Passenger in prod (lo que hace que sea inutilizable b / c de comportamiento de desove en 2.2.15). Probé contra Rails de borde y el rendimiento en desarrollo fue ligeramente peor 14.5s vs 14.2s. Si elimino mis dependencias de prueba, se guardan 2-3 segundos, pero esto no ayuda cuando estoy ejecutando pruebas. Supongo que es un poco molesto esperar 5 minutos para que todas mis instancias Thin se reinicien y esperar 15 segundos antes de que se ejecuten mis pruebas, pero en este punto es una compensación aceptable debido a la productividad que gano con Rails 3. Si alguien tiene alguna Ideas para ayudar a acelerar las cosas, soy todo oídos. Aquí están los resultados de la prueba:

Nota: mi aplicación en Rails 2.3 se cargó en menos de 3 segundos en dev (aunque he convertido un poco del código en motores y he agregado gems de haml y twitter_oauth desde el cambio a rails3)

** Todas las pruebas realizadas con Rails 3RC y Ruby 1.9.2rc2

Prod with Thin – CentOS 5.5, instancia de 2GB del servidor de la nube Rackspace
Aplicación de prueba # 1 con 24 dependencias de gems

 inicio env.rb - Total = 0
   iniciar app.rb - 0.00110546 transcurrido.  Total = 0.001180052  
     iniciar boot.rb - 0.000600488 transcurrido.  Total = 0.00178644    
     final boot.rb - 0.7935529 transcurrido.  Total = 0.795507318  
     arranque requiere Rails / todos - 0.000189127 transcurridos.  Total = 0.795701199  
     fin requiere Rails / todos - 1.086998364 transcurridos.  Total = 1.882735263  
     iniciar Bundler requiere - 0.000109708 transcurrido.  Total = 1.88285043  
     Bundler final requiere - 8.955853243 transcurrido.  Total = 10.838746673  
   end app.rb - 0.062975913 transcurrido.  Total = 10.901753753  
   # /railties-3.0.0.rc/lib/rails/initializable.rb 
   iniciar ejecutar inicializadores - 0.000145906 transcurridos.  Total = 10.901910186  
     load_environment_config - 0.116689774 transcurrido.  Total = 11.018632298  
     initialize_cache - 0.246161343 transcurrido.  Total = 11.320543397  
     active_record.initialize_database - 0.080047485 transcurrido.  Total = 11.400961893  
     bootstrap_hook - 1.034189984 transcurrido.  Total = 12.451309104  
     active_support.initialize_time_zone - 1.969821814 transcurrido.  Total = 14.448777651  
     action_controller.set_configs - 0.594991537 transcurrido.  Total = 15.044692126  
     will_paginate.active_record - 0.324460921 transcurrido.  Total = 15.386837641  
     will_paginate.action_view - 1.904889132 transcurrido.  Total = 17.328981523  
     add_view_paths - 0.087811847 transcurrido.  Total = 17.42011881  
     load_init_rb - 0.151282681 transcurrido.  Total = 17.709093173  
     load_init_rb - 0.362241273 transcurrido.  Total = 18.071865548  
     load_config_initializers - 0.144051305 transcurrido.  Total = 18.217433492  
     build_middleware_stack - 2.569453884 transcurrido.  Total = 20.826842081  
     eager_load!  - 4.165919064 transcurrido.  Total = 24.99280168  
     finisher_hook - 0.48795935 transcurrido.  Total = 25.480807439  
     repopulate_roles - 0.504085662 transcurrido.  Total = 25.984901297  
   inicializar los inicializadores de ejecución - ~ 0.00005 transcurridos.  Total = 25.985617783  
 end env.rb - ~ 0.00006 transcurrido.  Total = 25.985683903  

Dev con Mongrel – Max OSX 10.5.8, 2.66 Core2duo, 4GB de RAM
Aplicación de prueba # 1 con 24 dependencias de gems

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

Dev con Mongrel Test App # 2 con 2 dependencias de gems

 iniciar boot.rb (Bundler.setup) - Total = 0
 fin boot.rb (Bundler.setup) - 1.724158 transcurrido.  Total = 1.724199
 iniciar app.rb - 0.041006 transcurrido.  Total = 1.765211
   arranque requiere Rails - 0.000151 transcurrido.  Total = 1.765364
   extremo requiere Rails - 0.360051 transcurrido.  Total = 2.125426
   iniciar Bundler.require (: predeterminado, Rails.env) - 5.5e-05 transcurrido.  Total = 2.125485
   final Bundler.require (: predeterminado, Rails.env) - 0.008396 transcurridos.  Total = 2.133889
 end app.rb - 0.007805 transcurrido.  Total = 2.141704
 iniciar env.rb - 0.16541 transcurrido.  Total = 2.307128
   iniciar run_initializers - 0.00031 transcurrido.  Total = 2.307442
     load_active_support - 0.24045 transcurrido.  Total = 2.579421
     active_support.initialize_time_zone - 0.206237 transcurrido.  Total = 2.837663
     action_controller.deprecated_routes - 0.210291 transcurrido.  Total = 3.048634
     build_middleware_stack - 0.220663 transcurrido.  Total = 3.273035
   end run_initializers - 3.0e-06 transcurrido.  Total = 3.29339
 final env.rb - 8.7e-05 transcurrido.  Total = 3.293483

Ya que esta es una pregunta bastante antigua: ¿Lo has probado con la versión de lanzamiento de Rails 3?

Eso es mucho tiempo pero, en última instancia, sin sentido. Mis aplicaciones de Rails se mantienen en funcionamiento durante meses, por lo que es una fracción de una fracción del 1 por ciento del tiempo de ejecución total.

¿Tienes un montón de dependencias con las que Bundler tiene que lidiar? Puedo hacer que mi aplicación Rails 3 se inicie en menos de 2 segundos en cualquier entorno, pero utilizo muy pocas gems de terceros.

Bundler a menudo pasa más de la mitad de su tiempo requiriendo gems. ¿Alguna de las dependencias que está cargando es innecesaria en el modo dev / test? Por ejemplo, algunas de mis gems solo son usadas por trabajadores de resque o en otros scripts. Puede agregar :require => false y luego solicitarlos manualmente cuando los necesite para algunas ganancias de velocidad de inicio modestas en el modo dev / test.

Antes de hacerlo, suelo hacer un perfil de las declaraciones de requisitos (en lib / bundler / runtime.rb) para ver si realmente vale la pena eliminarlas.

Tengo 3 aplicaciones de Rails 3 y estoy migrando una de 2.3.8, la de Rails 2.3.8 en 4 segundos, y la twig que está a medio camino en los Rails 3 toma 12 segundos, todos los otros Rails 3 proyectos toman de 20 a 30 segundos para cargar, es muy deprimente cuando veo un screencast donde alguien carga su aplicación de Rails en 3 segundos, he estado tirando de mi pelo desde que migro a Rails 3 pensando que era mi entorno.