Rails 3.2.1:在视图中调用未定义的方法会导致测试挂起30秒以上

我正在将我的应用程序从3.0.9升级到3.2.1(ruby 1.9.3-p0,rvm,bundler),还有一件我无法追踪的问题就是这个问题。 我有一个控制器规范(在规格/控制器中)为每个示例呈现视图。 它呈现的模板可以有任何未定义的方法(比如在haml中调用“ – blahblah”),它会导致测试挂起超过30秒。 这是错误:

undefined local variable or method `blahblahblah' for #<#:0x007fa849c578c8> 

我运行调试器并在尝试记录错误本身时发生了挂起。 这发生在activesupport-3.2.1/lib/active_support/notifications/instrumenter.rb line 22 。 这个Rails的错,haml的错,还是其他一些库?

这是我的Gemfile,以防我使用的东西可能是问题:

 source 'http://rubygems.org' source 'http://gems.github.com' source 'http://gemcutter.org' gem 'rails', '3.2.1' gem 'rake', '~> 0.9.2.2' gem 'mysql2', '~> 0.3.11' gem 'htmldoc' gem 'haml', '~> 3.1.4' gem 'sass', '~> 3.1.4' gem 'hpricot' gem 'curb' gem 'mini_magick' gem 'liquid', '~> 2.3.0' gem 'httparty', '~> 0.8.1' gem 'linkedin', '0.1.7', :require => 'linkedin' gem 'twitter', '~> 2.0.2', :require => 'twitter' gem 'mime-types', '>=1.16', :require => 'mime/types' gem 'oauth' gem 'roxml' gem 'nokogiri' gem 'sax-machine' gem 'googlecharts', '1.6.7', :require => 'gchart' gem 'pdf-reader', '~> 0.9.0' gem 'paper_trail' gem 'rubyzip', '0.9.4', :require => 'zip/zip' gem 'activemerchant', '~> 1.20.2', :require => 'active_merchant' gem 'compass', '~> 0.11.5' gem 'compass-rgbapng', '0.1.1', :require => 'rgbapng' gem 'fancy-buttons', '~> 1.1.1' gem 'ruby-openid' gem 'RedCloth', '~> 4.2.9' gem 'koala', '~> 1.0.0' gem 'scoped_search', '~> 2.3.6' gem 'wicked_pdf', '0.7.0' gem 'devise', '~> 2.0.0' gem 'paperclip', '~> 2.5.0' gem 'aws-sdk' # required for paperclip gem 'whois', '~> 2.0.4' gem 'validates_timeliness', '~> 3.0.8' gem 'will_paginate', '~> 3.0.2' gem 'hoptoad_notifier', '~> 2.4.11' gem 'savon', '~> 0.9.2' gem 'escape_utils' gem 'ajaxful_rating', '3.0.0.beta3' gem 'acts_as_list', '~> 0.1.3' gem 'despamilator', '~> 2.0' gem 'prawn', '~> 0.12.0', :submodules => true gem 'net-dns', '~> 0.6.1' gem 'authlogic', '~> 3.1.0' gem 'myspaceid-sdk', '~> 0.1.11', :require => 'myspace' gem 'in_place_editing', '~> 1.1.2' gem 'deadlock_retry', '~> 1.1.2' gem 'query_trace', '~> 0.1.1' gem 'aasm', '~> 3.0.2' gem 'vanity', '~> 1.7.1' gem 'prototype-rails', '~> 3.2.1' group :development, :test do gem 'rspec-rails', '~> 2.8.1' gem 'rspec' # one-liner to install these properly: bash <  0.3.5' gem 'capybara' gem 'database_cleaner' gem 'cucumber-rails', '~> 1.2.1' gem 'cucumber' gem 'launchy' end 

谢谢!

我在Github上的Rails问题跟踪器中找到了这个答案(截至目前它仍然是一个开放的bug)。 问题结果是,当引发错误时,检查了一个ActionDispatch::Routing::RouteSet的实例,这显然导致该对象检查它所持有的每个项目。 因此,RouteSet越大,#inspect所用的时间#inspect长。 这是修复:

 module ActionDispatch module Routing class RouteSet alias inspect to_s end end end 

有关该错误的更多信息, 请参阅此处 。