MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Tempo di caricamento RSpec incredibilmente lungo su OS X

Bundle

Mi sembra un problema di caricamento del bundler. Consiglio di fare qualche misura in più. Usi 1 gemset per progetto o memorizzi tutto in 1 gemset (è vero se non ne usi nessuno)? Se hai molte gemme in 1 directory (cioè 1 gemset per tutte), alla fine rallenterà molto il bundler, poiché ha bisogno di attraversare più percorsi per fare il suo lavoro.

bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset 

Se gem list -q | wc -l riporta un valore abbastanza grande (ho 237 e tutto sembra normale per me), forse è necessario dividere le gemme installate in un gemset separato per progetto.

Effettua altre misurazioni con time comando, cerca il real valore, è la somma totale.

Per prima cosa, rimuovi il tuo bundled_rspec wrapper, non è necessario con ultimo RVM versioni.

Quindi misura il caricamento delle tue specifiche con e senza 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 ti dà grandi numeri anche per progetti con Gemfile relativamente piccoli, è un problema di bundler.

Rotaie

Il collo di bottiglia successivo è solitamente Rails stesso. Prova a misurare un test che non carica Rails (cioè solo spec_helper ) e quindi testare con i binari (cioè con rails_helper ).

Non appena inizierai a vedere una grande differenza nei numeri, saprai dove hai un problema.

Primavera

Come soluzione rapida per migliorare le prestazioni delle rotaie è l'utilizzo di spring gemma . Se usi Rails 4.1+ Spring è già abilitato.

Per abilitare Spring per rspec aggiungi al tuo Gemfile

gem 'spring-commands-rspec', group: :development

ed esegui

$ bundle install
$ spring binstub --all

L'ultimo comando genererà wrapper per tutti i binari supportati da Spring nel bin del tuo progetto cartella (dai un'occhiata lì e non dimenticare di impegnarli). Dopodiché dovresti eseguire rspec con bin/rspec . La prima esecuzione sarà ancora lenta, ma tutte le corse successive dovrebbero essere abbastanza veloci poiché Rails sarà già caricato.