2012-05-28 2 views
7

Ich erstelle einen Rails Performance Test, wie in der Rails Guide beschrieben, und ich habe Probleme mit Ruby-Prof.Fehler mit Ruby-Prof in einem Rails Performance Test

Ich benutze Ruby 1.9.2-p0 (obwohl das gleiche Problem auf P320 erfahren) und Rails 3.1.0.

Ich habe einen ziemlich einfachen Test für einen Controller, der auf this example entspricht.

Nach the guide, ich brauche ruby-prof zu installieren, bevor ich Performance-Tests verwenden kann. Sicher genug, wenn ich ohne sie meine Leistung Test ausführen, erhalte ich:

Specify ruby-prof as application's dependency in Gemfile to run benchmarks.

Wenn ich die Führungsanweisungen zu befolgen, füge ich das meinem Gemfile:

gem 'ruby-prof', :git => 'git://github.com/wycats/ruby-prof.git'

... und bekommen Version 0.11.0 vom wycats Repository. Wenn ich meinen Test laufen bekomme ich diesen Fehler:

/Users/craig/.rvm/gems/ruby-1.9.2-p0/bundler/gems/ruby-prof-ffae61a89553/lib/ruby-prof/abstract_printer.rb:44:in `inspect': undefined method `to_s' for #<Class:0x000001025a3f18> (NoMethodError) 
from /Users/craig/.rvm/gems/ruby-1.9.2-p0/bundler/gems/ruby-prof-ffae61a89553/lib/ruby-prof/abstract_printer.rb:44:in `full_name' 
... 

Aber „wycats“ erscheint nicht die kanonische Github Repo für Ruby-prof zu sein. Die Dokumentation bezieht sich auf rdp (Roger-Pack). Wenn ich diese Repo anstatt:

gem 'ruby-prof', :git => 'git://github.com/rdp/ruby-prof.git'

... ich Version 0.11.2, und diese Fehlermeldung erhalten:

/Users/craig/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.1.0/lib/active_support/testing/performance/ruby.rb:39:in run': undefined method values' for [#]:Array (NoMethodError) from /Users/craig/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.1.0/lib/active_support/testing/performance.rb:140:in `run_profile' ...

ich den gleichen Fehler, wenn ich nur das Juwel von rubygems direkt verwenden (wieder, Version 0.11.2):

gem 'ruby-prof'

Irgendwelche Ideen, was falsch läuft, oder wie es zu lösen?

Antwort

8

Um neueste ruby-prof Version verwenden Sie benötigen Schienen 3.2.3, ich weiß nicht, was ruby-prof-Version mit Schienen 3.1 können vielleicht verwenden können Sie kopieren lib/active_support/Prüf-/Leistung/ruby.rb von activesupport 3.2.3

8

Das Problem ist in activesupport-3.2.2 \ lib \ active_support \ testing \ performance \ ruby.rb.

Ändern Sie Zeile 39 von:

@total = @data.threads.sum(0) { |method_infos| method_infos.max.total_time } 

An:

@total = @data.threads.sum(0) {|thread| thread.top_method.total_time} 
+0

genial! vielen Dank. Wird dieses Patch aus Neugier auf Schienen geschickt? – pjammer

4

Ruby on Rails 3.2.6 hat dies bereits korrigiert. 39 https://github.com/rails/rails/blob/v3.2.6/activesupport/lib/active_support/testing/performance/ruby.rb

Linie

@total = @data.threads.sum(0) { |thread| thread.methods.max.total_time } 

in Rails 3.2.3
https://github.com/rails/rails/blob/v3.2.3/activesupport/lib/active_support/testing/performance/ruby.rb

es ist:

@total = @data.threads.values.sum(0) { |method_infos| method_infos.max.total_time } 

und sieht aus wie die Werte Methode hier versagt.

0

In meinem Fall mit Rails 3.2.9, habe ich automatisch generierte Verzeichnis 'test/performance' aus meinem Projekt entfernt.

1

Ich hatte das gleiche Problem. Ich habe das behoben, indem ich die korrekte ruby-prof-Version für meine Rails-Version installiert habe.

Also, ich war mit Rails 3.0.9 am 16. Juni 2011 veröffentlicht (nach https://rubygems.org/gems/rails/versions).

Dann prüfte ich um Ruby-prof um das gleiche Datum veröffentlicht. Und es war 0.10.8 am 6. Juli 2011 freigegeben.

Nach der Installation der oben genannten habe ich es funktioniert. Einige der Profilierungsmetriken werden möglicherweise nicht unterstützt.

Prost.

+1

Willkommen zu stapeln Überlauf ... Bitte lesen Sie den FAQ, bevor Sie die Frage beantworten .. – coder

+0

@coder Ich ging durch die Faq. Habe nichts gesehen, was ich in meiner Antwort vermisst habe. Können Sie hervorheben, wenn etwas übersehen wird? – jef

+0

Ja, es gab die falsche Ruby-Prof-Version in meinem Fall, und Ihre Lösung hat mir geholfen. –

Verwandte Themen