2

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

undefined local variable or method `blahblahblah' for #<#<Class:0x007fa84f76cc90>: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 < <(curl -L https://raw.github.com/gist/1333785)
  gem 'linecache19', '0.5.13'
  gem 'ruby-debug-base19', '0.11.26'

  gem 'capistrano'
end

group :test do
  gem 'factory_girl_rails'
  gem 'syntax'
  gem 'timecop', '~> 0.3.5'
  gem 'capybara'
  gem 'database_cleaner'
  gem 'cucumber-rails', '~> 1.2.1'
  gem 'cucumber'
  gem 'launchy'
end

谢谢!

4

1 回答 1

3

我在 Github 上的 Rails 问题跟踪器中找到了答案(到目前为止,它仍然是一个开放的错误)。问题是,当出现错误时,ActionDispatch::Routing::RouteSet检查了一个实例,这显然导致对象检查它所持有的每个项目。所以,RouteSet 越大,花费的时间就越长#inspect。这是修复:

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

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

于 2012-02-11T02:45:06.243 回答