Empaquetador
Parece un problema de carga del paquete para mí. Recomendaría hacer algunas medidas más. ¿Usas 1 conjunto de gemas por proyecto o almacenas todo en 1 conjunto de gemas (es cierto si no usas ninguno)? Si tiene muchas gemas en 1 directorio (es decir, 1 conjunto de gemas para todas), eventualmente ralentizará mucho el empaquetador, ya que necesita atravesar más rutas para hacer su trabajo.
bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset
Si gem list -q | wc -l
reporta un valor bastante grande (tengo 237
y todo parece normal para mí), tal vez necesite dividir las gemas instaladas en un conjunto de gemas separado por proyecto.
Haz algunas medidas más con time
comando, busca el real
valor, es la suma total.
Primero, elimine su bundled_rspec
contenedor, no es necesario con último RVM
versiones.
Luego mida su carga de rspec con y sin Bundler:
time rspec -v # with implicit bundler loading, rubygems-bundler gem is in use
time NOEXEC_DISABLE=1 rspec -v # without bundler, disable rubygems-bundler gem for this call`
Si time rspec -v
le da números grandes incluso para proyectos con Gemfile relativamente pequeño, es un problema del paquete.
Raíles
El siguiente cuello de botella suele ser el propio Rails. Intente medir una prueba que no cargue Rails (es decir, solo spec_helper
) y luego probar con rieles (es decir, con rails_helper
).
Tan pronto como comience a ver una gran diferencia en los números, sabrá dónde tiene un problema.
Primavera
Como solución rápida para mejorar el rendimiento de los rieles, se usa spring
joya
. Si usa Rails 4.1+, Spring ya está habilitado.
Para habilitar Spring para rspec
agregar a su Gemfile
gem 'spring-commands-rspec', group: :development
y ejecuta
$ bundle install
$ spring binstub --all
El último comando generará envoltorios para todos los archivos binarios admitidos por Spring en el bin
de su proyecto carpeta (eche un vistazo allí y no olvide enviarlos). Después de eso, debe ejecutar rspec
con bin/rspec
. La primera ejecución seguirá siendo lenta, pero todas las ejecuciones posteriores deberían ser lo suficientemente rápidas, ya que Rails ya estará cargado.