2012-05-28 43 views
7

我正在創建一個Rails性能測試,如Rails Guide中所述,我遇到了ruby-prof問題。Rails性能測試中的ruby-prof錯誤

我使用的是Ruby 1.9.2-p0(儘管在p320上遇到過同樣的問題)和Rails 3.1.0。

我對控制器的測試非常簡單,相當於this example

根據the guide,我需要安裝ruby-prof才能使用性能測試。果然,當我跑我的性能測試,沒有它,我得到:

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

如果我按照指南的指示信中,我加入到我的Gemfile:

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

...和從wycats存儲庫獲取版本0.11.0。當我運行我的測試中,我得到這個錯誤:

/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' 
... 

但「wycats」似乎並不爲規範Github上回購了紅寶石教授。該文件涉及rdp(Roger Pack)。如果我使用回購來代替:

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

...我得到的版本0.11.2,並得到這個錯誤:

/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' ...

我得到同樣的錯誤,如果我直接用寶石的rubygems從(同樣,版本0.11.2):

gem 'ruby-prof'

任何想法發生了什麼事情錯了,還是怎麼解決呢?

回答

8

要使用最新的Ruby-教授的版本,你需要導軌3.2.3,我不知道你可以用鋼軌3.1使用的紅寶石教授版本,也許你可以複製的lib/active_support /測試/性能/ ruby.rb from activesupport 3.2.3

8

問題出在activesupport-3.2.2 \ lib \ active_support \ testing \ performance \ ruby​​.rb。

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

要:從

更改行39

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

太棒了!非常感謝。這個補丁是否提交給rails,出於好奇? – pjammer

4

Ruby on Rails的3.2.6有這個已經修正。 https://github.com/rails/rails/blob/v3.2.6/activesupport/lib/active_support/testing/performance/ruby.rb

線39

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

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

是:

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

,看起來像方法在這裏失敗。

0

在我的Rails 3.2.9中,我從我的項目中刪除了自動生成的目錄'test/performence'。

1

我有同樣的問題。我通過爲我的Rails版本安裝正確的ruby-prof版本進行了修復。

所以,我使用的是2011年6月16日發佈的Rails 3.0.9(根據https://rubygems.org/gems/rails/versions)。

然後,我檢查了在同一日期發佈的ruby-prof。它是0.10.8發佈於2011年7月6日。

安裝上述後,我得到它的工作。某些分析指標可能不受支持。

乾杯。

+1

歡迎來到Stack Overflow ..請在回答問題之前閱讀Faq .. – coder

+0

@coder我經歷了Faq。在我的回答中沒有看到我錯過的任何內容。你能突出顯示是否有錯過的東西。 – jef

+0

是的,在我的情況下有錯誤的ruby-prof版本,您的解決方案幫助了我。 –