Bündelung
Sieht für mich nach einem Ladeproblem des Bundlers aus. Ich würde empfehlen, noch ein paar Messungen zu machen. Verwenden Sie 1 Gemset pro Projekt oder speichern Sie alles in 1 Gemset (es stimmt, wenn Sie keines verwenden)? Wenn Sie viele Gems in einem Verzeichnis haben (d. h. 1 Gemset für alle), wird es den Bundler letztendlich stark verlangsamen, da er mehr Pfade durchlaufen muss, um seine Arbeit zu erledigen.
bundle | wc -l # how many gems bundler uses in your current project
gem list -q | wc -l # how many gems in your gemset
Wenn gem list -q | wc -l
meldet einen ziemlich großen Wert (ich habe 237
und für mich scheint alles normal zu sein), müssen Sie möglicherweise installierte Gems in ein separates Gemset pro Projekt aufteilen.
Führen Sie weitere Messungen mit time
durch Befehl, suchen Sie nach dem real
Wert, es ist die Gesamtsumme.
Entfernen Sie zuerst Ihre bundled_rspec
Wrapper, wird mit neuesten RVM
nicht benötigt Versionen.
Messen Sie dann Ihre Rspec-Belastung mit und ohne 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`
Wenn time rspec -v
gibt Ihnen selbst für Projekte mit relativ kleinen Gemfiles große Zahlen, das ist ein Bundler-Problem.
Schienen
Der nächste Engpass ist normalerweise Rails selbst. Versuchen Sie, einen Test zu messen, der Rails nicht lädt (d. h. nur spec_helper
) und dann mit Rails testen (also mit rails_helper
).
Sobald Sie anfangen, große Unterschiede in den Zahlen zu sehen, werden Sie wissen, wo Sie ein Problem haben.
Frühling
Als schnelle Lösung zur Verbesserung der Rail-Performance ist die Verwendung von spring
Schmuckstück
. Wenn Sie Rails 4.1+ verwenden, ist Spring bereits aktiviert.
Um Spring für rspec
zu aktivieren zu Ihrem Gemfile
hinzufügen
gem 'spring-commands-rspec', group: :development
und führen Sie
aus$ bundle install
$ spring binstub --all
Der letzte Befehl generiert Wrapper für alle von Spring unterstützten Binärdateien im bin
Ihres Projekts Ordner (sehen Sie dort nach und vergessen Sie nicht, sie zu übertragen). Danach sollten Sie rspec
ausführen mit bin/rspec
. Der erste Lauf wird immer noch langsam sein, aber alle nachfolgenden Läufe sollten schnell genug sein, da Rails bereits geladen ist.