Rails 3.2.1:在视图中调用未定义的方法会使测试挂起30+秒 [英] Rails 3.2.1: Calling undefined method in view causes test to hang for 30+ seconds

查看:79
本文介绍了Rails 3.2.1:在视图中调用未定义的方法会使测试挂起30+秒的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将我的应用程序从3.0.9升级到3.2.1(红宝石1.9.3-p0,rvm,捆绑程序),而我还无法跟踪的一件事就是这个问题.我有一个控制器规范(在规范/控制器中),可为每个示例渲染视图.它呈现的模板可以具有任何未定义的方法(例如在haml中调用-blahblah"),这会使测试挂起30秒钟以上.这是错误:

I'm upgrading my app from 3.0.9 to 3.2.1 (ruby 1.9.3-p0, rvm, bundler) and one thing that I haven't been able to track down yet is this problem. I have a controller spec (in spec/controllers) that renders views for each example. The template that it renders can have any undefined method (like calling "- blahblah" in the haml) and it causes the test to hang for over 30 seconds. Here is the error:

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

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

I ran the debugger and the hang happened when trying to log the error itself. This happens in activesupport-3.2.1/lib/active_support/notifications/instrumenter.rb line 22. So is this Rails' fault, haml's fault, or some other library?

这是我的Gemfile,以防万一我正在使用的东西可能是问题所在:

Here is my Gemfile just in case something I am using may be the problem:

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

谢谢!

推荐答案

我在Github上的Rails问题跟踪器中找到了答案(到目前为止,这仍然是一个未解决的错误).问题原来是当引发错误时,检查了ActionDispatch::Routing::RouteSet的一个实例,这显然导致对象检查了它持有的每个项目.因此,RouteSet越大,#inspect花费的时间就越长.解决方法如下:

I found the answer to this in the Rails issue tracker on Github (it's still an open bug as of this time). The problem turned out to be that when an error was raised, an instance of ActionDispatch::Routing::RouteSet was inspected, which apparently caused the object to inspect every item it was holding onto. So, the larger the RouteSet, the longer the #inspect took. Here is the fix:

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

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

For more info on the bug, see here.

这篇关于Rails 3.2.1:在视图中调用未定义的方法会使测试挂起30+秒的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆