7

我正在创建 Rails 性能测试,如Rails Guide中所述,但我遇到了 ruby​​-prof 问题。

我正在使用 Ruby 1.9.2-p0(尽管在 p320 上遇到了同样的问题)和 Rails 3.1.0。

我对与此示例等效的控制器进行了非常简单的测试。

根据指南,我需要安装 ruby​​-prof 才能使用性能测试。果然,如果我在没有它的情况下运行我的性能测试,我会得到:

在 Gemfile 中将 ruby​​-prof 指定为应用程序的依赖项以运行基准测试。

如果我按照指南对信件的说明进行操作,我会将其添加到我的 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”似乎不是 ruby​​-prof 的规范 Github 存储库。该文档是指rdp (Roger Pack)。如果我改用那个 repo:

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 methodvalues' for [#]:Array ( NoMethodError) 来自 /Users/craig/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.1.0/lib/active_support/testing/performance.rb:140:in `run_profile' ...

如果我直接使用来自 ruby​​gems 的 gem(同样,版本 0.11.2),我会得到同样的错误:

宝石'红宝石教授'

任何想法出了什么问题,或者如何解决它?

4

5 回答 5

8

问题出在 activesupport-3.2.2\lib\active_support\testing\performance\ruby.rb 中。

将第 39 行从:

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

至:

@total = @data.threads.sum(0) {|thread| thread.top_method.total_time}
于 2012-06-03T06:47:09.853 回答
8

要使用最新的 ruby​​-prof 版本,您需要 rails 3.2.3,我不知道您可以在 rails 3.1 中使用哪个 ruby​​-prof 版本,也许您可​​以从 activesupport 3.2 复制 lib/active_support/testing/performance/ruby.rb。 3

于 2012-06-01T01:12:26.540 回答
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 }

看起来values方法在这里失败了。

于 2012-06-22T15:42:44.343 回答
1

我遇到过同样的问题。我通过为我的 Rails 版本安装正确的 ruby​​-prof 版本来修复。

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

然后,我检查了在同一日期发布的 ruby​​-prof。它是 2011 年 7 月 6 日发布的 0.10.8。

安装完上述内容后,我得到了它的工作。某些分析指标可能不受支持。

干杯。

于 2013-02-27T04:57:08.513 回答
0

在我使用 Rails 3.2.9 的情况下,我从项目中删除了自动生成的目录“test/performence”。

于 2012-11-26T08:01:12.910 回答