MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Temps de chargement RSpec incroyablement long sur OS X

Groupeur

Cela ressemble à un problème de chargement de bundler pour moi. Je recommanderais de faire quelques mesures supplémentaires. Utilisez-vous 1 gemset par projet ou stockez-vous tout dans 1 gemset (c'est vrai si vous n'en utilisez pas) ? Si vous avez beaucoup de gemmes dans 1 répertoire (c'est-à-dire 1 gemset pour tous), cela ralentira considérablement le bundler, car il doit parcourir plus de chemins pour faire son travail.

ensemble
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 rapporte une valeur assez importante (j'ai 237 et tout semble normal pour moi), peut-être que vous devez diviser les gemmes installées en un gemset séparé par projet.

Effectuez d'autres mesures avec time commande, recherchez le real valeur, c'est la somme totale.

Tout d'abord, supprimez votre bundled_rspec wrapper, ce n'est pas nécessaire avec dernier RVM versions.

Ensuite, mesurez votre chargement rspec avec et sans 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 vous donne de gros chiffres même pour un projet avec un fichier Gemfile relativement petit, c'est un problème de bundler.

Rails

Le prochain goulot d'étranglement est généralement Rails lui-même. Essayez de mesurer un test qui ne charge pas Rails (c'est-à-dire juste spec_helper ) puis testez avec rails (c'est-à-dire avec rails_helper ).

Dès que vous commencerez à voir une grande différence dans les chiffres, vous saurez où vous avez un problème.

Printemps

En tant que solution rapide pour améliorer les performances des rails, utilisez spring bijou . Si vous utilisez Rails 4.1+, Spring est déjà activé.

Pour activer Spring pour rspec ajouter à votre Gemfile

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

et exécutez

$ bundle install
$ spring binstub --all

La dernière commande générera des wrappers pour tous les binaires pris en charge par Spring dans le bin de votre projet dossier (jetez-y un œil et n'oubliez pas de les valider). Après cela, vous devez exécuter rspec avec bin/rspec . La première exécution sera toujours lente, mais toutes les exécutions suivantes devraient être suffisamment rapides puisque les rails seront déjà chargés.