7

Railsガイドで説明されているようにRailsパフォーマンステストを作成していますが、ruby-profで問題が発生しています。

私はRuby1.9.2-p0(p320でも同じ問題が発生しました)とRails3.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)を参照しています。代わりにそのリポジトリを使用する場合:

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 values'for run': undefined method[#]: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のgemを直接使用した場合も同じエラーが発生します(ここでも、バージョン0.11.2)。

gem'ruby-prof'

何がうまくいかないのか、それを解決する方法はありますか?

4

5 に答える 5

8

Rails 3.2.3が必要な最新のruby-profバージョンを使用するには、rails 3.1で使用できるruby-profバージョンがわかりません。おそらく、activesupport3.2からlib/ active_support / tests / performance/ruby.rbをコピーできます。 3

于 2012-06-01T01:12:26.540 に答える
8

問題はactivesupport-3.2.2\lib \ active_support \ tests \ 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 に答える
4

Ruby onRails3.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 }

Rails3.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 に答える