Agrupador
Parece algum problema de carregamento do bundler para mim. Recomendo fazer mais algumas medidas. Você usa 1 gemset por projeto ou armazena tudo em 1 gemset (é verdade se você não usar nenhum)? Se você tiver muitas gems em 1 diretório (ou seja, 1 gemset para todos), ele eventualmente desacelerará muito o bundler, pois ele precisa percorrer mais caminhos para fazer seu trabalho.
bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset
If
gem list -q | wc -l
relata um valor muito grande (tenho 237
e tudo parece normal para mim), talvez você precise dividir as gems instaladas em um gemset separado por projeto. Faça mais algumas medições com
time
comando, procure o real
valor, é a soma total. Primeiro, remova seu
bundled_rspec
wrapper, não é necessário com o último RVM
versões. Em seguida, meça seu carregamento de rspec com e sem 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`
Se
time rspec -v
fornece grandes números, mesmo para projetos com Gemfile relativamente pequeno, é um problema do empacotador. Trilhos
O próximo gargalo geralmente é o próprio Rails. Tente medir um teste que não carrega Rails (ou seja, apenas
spec_helper
) e, em seguida, teste com trilhos (ou seja, com rails_helper
). Assim que você começar a ver uma grande diferença nos números, saberá onde está o problema.
Primavera
Como uma solução rápida para melhorar o desempenho do Rails é o uso de
spring
jóia
. Se você usa Rails 4.1+ o Spring já está habilitado. Para habilitar o Spring para
rspec
adicione ao seu Gemfile
gem 'spring-commands-rspec', group: :development
e corra
$ bundle install
$ spring binstub --all
O último comando irá gerar wrappers para todos os binários suportados por mola no
bin
do seu projeto pasta (dê uma olhada lá e não se esqueça de enviá-los). Depois disso, você deve executar rspec
com bin/rspec
. A primeira execução ainda será lenta, mas todas as execuções subsequentes devem ser rápidas o suficiente, pois o Rails já estará carregado.