2012-05-28 25 views
7

Tôi đang tạo thử nghiệm Hiệu suất Rails, như được mô tả trong Rails Guide và tôi đang gặp sự cố với ruby-prof.Lỗi với ruby-prof trong Kiểm tra Hiệu suất Đường ray

Tôi đang sử dụng Ruby 1.9.2-p0 (mặc dù đã gặp sự cố tương tự trên p320) và Rails 3.1.0.

Tôi có một thử nghiệm khá đơn giản cho bộ điều khiển tương đương với this example.

Theo the guide, tôi cần phải cài đặt chuyên gia ruby ​​trước khi tôi có thể sử dụng kiểm tra hiệu suất. Chắc chắn, nếu tôi chạy thử nghiệm hiệu suất của tôi mà không có nó, tôi nhận được:

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

Nếu tôi làm theo hướng dẫn của hướng dẫn để lá thư, tôi thêm video này vào Gemfile tôi:

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

... và nhận phiên bản 0.11.0 từ kho lưu trữ wycats. Khi tôi chạy thử nghiệm của mình, tôi nhận được lỗi này:

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

Nhưng "wycats" dường như không phải là repo Github chuẩn cho ruby-prof. Tài liệu đề cập đến rdp (Roger Pack). Nếu tôi sử dụng repo thay vì:

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

... tôi nhận được phiên bản 0.11.2, và nhận được lỗi này:

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

tôi nhận được lỗi tương tự nếu tôi chỉ cần sử dụng đá quý từ rubygems trực tiếp (một lần nữa, phiên bản 0.11.2):

gem 'ruby-prof'

Bất kỳ ý tưởng gì đang xảy ra hoặc cách giải quyết?

Trả lời

8

Để sử dụng phiên bản mới nhất ruby-prof bạn cần đường ray 3.2.3, tôi không biết những gì phiên bản ruby-prof bạn có thể sử dụng với đường ray 3.1, có thể bạn có thể sao chép lib/active_support/thử nghiệm/hiệu suất/ruby.rb từ activesupport 3.2.3

8

Vấn đề là trong activesupport-3.2.2 \ lib \ active_support \ testing \ performance \ ruby.rb.

Thay đổi dòng 39 từ:

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

Để:

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

tuyệt vời! cám ơn rất nhiều. Bản vá này có được gửi lên đường ray, không tò mò không? – pjammer

4

Ruby on Rails 3.2.6 đã này đã sửa chữa. https://github.com/rails/rails/blob/v3.2.6/activesupport/lib/active_support/testing/performance/ruby.rb

dòng 39

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

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

nó là:

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

và trông giống như giá trị phương pháp được không đây.

0

Trong trường hợp của tôi với Rails 3.2.9, tôi đã xóa thư mục được tạo tự động 'test/performence' khỏi dự án của tôi.

1

Tôi gặp vấn đề tương tự. Tôi đã sửa bằng cách cài đặt phiên bản ruby-prof chính xác cho phiên bản Rails của tôi.

Vì vậy, tôi đã sử dụng Rails 3.0.9 phát hành vào ngày 16 tháng 6 năm 2011 (theo số https://rubygems.org/gems/rails/versions).

Sau đó, tôi đã kiểm tra cho ruby-prof phát hành vào cùng ngày đó. Và nó đã được 0.10.8 phát hành vào ngày 06 tháng 7 năm 2011.

Sau khi cài đặt ở trên tôi đã nhận nó hoạt động. Một số chỉ số lược tả có thể không được hỗ trợ.

Chúc mừng.

+1

Chào mừng bạn đến ngăn xếp tràn .. Vui lòng đọc Câu hỏi trước khi trả lời câu hỏi .. – coder

+0

@coder Tôi đã đi qua Faq. Không nhìn thấy bất cứ điều gì tôi bị mất trong câu trả lời của tôi. Bạn có thể làm nổi bật nếu một cái gì đó bị bỏ qua. – jef

+0

Có, đã có phiên bản ruby-prof sai trong trường hợp của tôi, và giải pháp của bạn đã giúp tôi. –

Các vấn đề liên quan