run rails new migrations example create ruby-on-rails ruby ruby-on-rails-3 console

ruby-on-rails - new - ruby on rails scaffold example



Rieles 3: acelerar el tiempo de carga de la consola (6)

¡Recargar! ha sido un problema desde hace algún tiempo. Echa un vistazo a this . Hay algunos parches que puede usar y algunos consejos sobre cómo puede solucionar su problema.

El método de recarga en sí tiene este aspecto.

# reloads the environment def reload!(print=true) puts "Reloading..." if print ActionDispatch::Callbacks.new(lambda {}, false).call({}) true end

Siempre puedes agregar tu entorno a este método para anularlo y forzar la recarga que requieres.

Esto funcionó para mí, así que avísanos si funciona para ti. Todo lo mejor.

Me pregunto si hay alguna manera relativamente fácil de acelerar el tiempo de carga de la consola, que está comenzando a acercarse a 30 segundos. ¡Tengo muchas subclases cuyos métodos no parecen verse afectados por la reload! así que termino abriendo y cerrando la consola mucho. IRB carga un rayo rápido.

¿Tengo demasiadas gemas? ¿Cómo hago para cronometrar las tareas de carga para poder ver lo que más tiempo me toma? Como puede ver, ya he probado la gema dev-boost en vano. La aplicación está bien en Passenger, es solo la carga de la consola lo que me saca de quicio. Ejecutando en MBP OSX 10.6.6 con 2.4GHz y 4GB de RAM. No usando RVM.

Versiones:

Ovid$ rails -v Rails 3.0.3 Ovid$ ruby -v ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-darwin10]

Memoria:

Ovid$ vm_stat Mach Virtual Memory Statistics: (page size of 4096 bytes) Pages free: 118818. Pages active: 341320. Pages inactive: 99490. Pages speculative: 310576. Pages wired down: 112527. "Translation faults": 23097323. Pages copy-on-write: 1270961. Pages zero filled: 13836659. Pages reactivated: 36. Pageins: 165761. Pageouts: 0. Object cache: 28 hits of 760846 lookups (0% hit rate)

Gemfile:

source ''http://rubygems.org'' gem ''rails'', ''3.0.3'' gem ''mysql2'' gem ''foreigner'' gem ''haml'' gem ''capistrano'' gem ''nokogiri'' #web services gem ''yammer4r'' gem ''ruby-freshbooks'' #authentication gems from nifty generator gem "bcrypt-ruby", :require => "bcrypt" gem "mocha", :group => :test gem ''authlogic'' #dev group :development do gem ''rails-dev-boost'', :git => ''git://github.com/thedarkone/rails-dev-boost.git'', :require => ''rails_development_boost'' end #testing group :test do gem ''database_cleaner'' gem ''cucumber-rails'' gem ''cucumber'' gem ''rspec-rails'' gem ''spork'' gem ''launchy'' gem ''machinist'' gem ''faker'' gem ''capybara'' end

¡Muchas gracias!


Definitivamente se trata de limpiar tu código e identificar los cuellos de botella, pero una vez que hayas hecho esos ahorros, vale la pena mirar algo como Zeus para acelerar tus tiempos de desarrollo.

gem install zeus

https://github.com/burke/zeus (docs)

No está exento de errores y algunas veces requiere un reinicio, pero sigo viendo un aumento general en los tiempos de desarrollo mediante el reinicio rápido de servidores y consolas después de cambios de código pequeños.


Finalmente encontré mis cuellos de botella de inicio utilizando Benchmark. En particular, vaya a la gema bundler y en lib / bundler / runtime.rb, busque la línea que hace Kernel.require y envuélvala de esta manera:

puts Benchmark.measure("require #{file}") { Kernel.require file }.format("%n: %t %r")

Es posible que deba agregar un "punto de referencia" en su aplicación, como en config / boot.rb. Eso le mostrará cuánto tiempo lleva requerir cada gema. No puedo garantizar que sus resultados coincidan con los míos, pero tenía algunas gemas que tardaban más de un segundo en cargarse en comparación con el milisegundo inferior para la mayoría. Algunas eran gemas que no necesitaba para desarrollar pero que necesitaba algunas tareas en el entorno de desarrollo, por ejemplo, capistrano, shoulda. Hice una evaluación comparativa de otras áreas de inicio (inicializadores, etc.), pero no pude encontrar ningún cuello de botella significativo.

Todavía no he descubierto una forma limpia de configurar la aplicación para que solo cargue las tareas donde realmente se necesitan. Posiblemente, podría crear un entorno llamado: speedy y usar RAILS_ENV = speedy rails s / c para el inicio cuando sé que no necesito esas gemas. Luego, en Gemfile, podría usar group: speedy para excluir esas gemas en ciertos casos.

Dicho todo esto, la mayor molestia de inicio para mí es tener que cargar todo el entorno para ejecutar una tarea de rake. Probablemente podría excluir la mayoría de las gemas por eso, pero Gemfile comenzaría a complicarse, así que no sé si vale la pena.


Forma ligeramente adaptada que es copiable, envuelve todo lo necesario y proporciona salida ordenable:

# Add this to the top of boot.rb require ''benchmark'' def require(file) puts Benchmark.measure("") { super }.format("%t require #{file}") end

Entonces puedes ejecutar no-op para verlos:

rails runner 1

O ordénelos y muestre los 50 mejores:

rails runner 1 | sort -nr | head -n 50


Puede acelerarlo agregando: require => nil a las entradas lentas de Gemfile y solicítelas manualmente. p.ej

gem ''jammit'', :require => nil

También abordé este tema en una reunión que tuve. Esto parece ser un error en ruby ​​1.9.2 (ver comentarios de este parche: https://gist.github.com/1008945 )

Puedes solucionarlo parcheando tu 1.9.2 por la esencia que acabo de vincular o actualizando a 1.9.2-head o 1.9.3-head .


Solo puedo sugerir poner tu bata de laboratorio y dividir el problema. Vea si comentar todos sus requisitos de gemas acelera las cosas (presumiblemente eso también implicará comentar las piezas de código que se basan en esas gemas). Si es así, comente la mitad a la vez y así sucesivamente.

Lo siento, esta no es una respuesta real. Podrías probar ruby-prof, supongo, por ejemplo invocándolo con rails runner y un script no operativo.

Intenté el ruby-prof script/rails runner ''nil'' en mi Mac pero parece que se ha bloqueado :-)

EDITAR

Si está usando git para su aplicación, puede probar también su comando de bisección y ver si hay un punto específico en el tiempo cuando las cosas se pusieron lentas, en lugar de solo un abotagamiento general.