代码之家  ›  专栏  ›  技术社区  ›  Garrett

开发模式下的异常页面需要15-30秒才能呈现,这是为什么?

  •  6
  • Garrett  · 技术社区  · 16 年前

    我使用的是Rails 3 beta 4,出于某种原因,每个异常都需要15-30秒才能显示出来。这是我的踪迹:

    Started GET "/something/something/approvals/new" for 127.0.0.1 at Thu Jun 24 21:17:12 -0400 2010
      SQL (1.8ms)  describe `approvals_users`
      SQL (24.6ms)  describe `clients_users`
      SQL (1.4ms)  describe `agencies_users`
      SQL (1.2ms)  describe `clients_users`
      SQL (1.2ms)  describe `approvals_users`
      SQL (1.7ms)  describe `permissions_users`
      Processing by ApprovalsController#new as HTML
      Parameters: {"project_id"=>"tricked", "client_id"=>"deez-nutz"}
      SQL (1.4ms)  describe `agencies_users`
      Agency Load (0.4ms)  SELECT `agencies`.* FROM `agencies` WHERE (`agencies`.`subdomain` = 'subdomain') LIMIT 1
      Plan Load (0.3ms)  SELECT `plans`.* FROM `plans` WHERE (`plans`.`id` = 3) LIMIT 1
      User Load (0.4ms)  SELECT `users`.* FROM `users` WHERE (`users`.`id` = 1) LIMIT 1
    Completed   in 93ms
    
    NoMethodError (undefined method `humanize' for nil:NilClass):
      app/models/approval.rb:38:in `state'
      app/models/approval.rb:38:in `state'
      app/controllers/approvals_controller.rb:10:in `new'
      app/controllers/approvals_controller.rb:10:in `new'
    
    Rendered /Users/garrett/.bundle/ruby/1.8/bundler/gems/rails-07b08721a226ff01f983e61d99ab4da96e296c97-6682cce0386811ffe3e6d31fc025ede0936d86c3/actionpack/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.9ms)
      SQL (2.5ms)  SHOW TABLES
      SQL (0.9ms)  SHOW TABLES
      SQL (0.9ms)  SHOW TABLES
      SQL (0.9ms)  SHOW TABLES
      SQL (0.9ms)  SHOW TABLES
      SQL (0.9ms)  SHOW TABLES
      SQL (0.9ms)  SHOW TABLES
      SQL (0.9ms)  SHOW TABLES
    Rendered /Users/garrett/.bundle/ruby/1.8/bundler/gems/rails-07b08721a226ff01f983e61d99ab4da96e296c97-6682cce0386811ffe3e6d31fc025ede0936d86c3/actionpack/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (21433.7ms)
    Rendered /Users/garrett/.bundle/ruby/1.8/bundler/gems/rails-07b08721a226ff01f983e61d99ab4da96e296c97-6682cce0386811ffe3e6d31fc025ede0936d86c3/actionpack/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (21630.2ms)
    

    如果有帮助的话,这是我的建议 Gemfile :

    source 'http://gemcutter.org'
    
    # Core
    # gem 'rails', '3.0.0.beta4'
    gem 'rails', :git => 'http://github.com/rails/rails.git'
    gem 'sinatra'
    gem 'mysql'
    gem 'bundler'
    gem 'memcache-client'
    gem 'system_timer'
    gem 'mime-types', :require => 'mime/types'
    gem 'json'
    gem 'haml', '~> 3.0.12'
    gem 'state_machine'
    gem 'bcrypt-ruby', :require => 'bcrypt'
    gem 'juicer'
    gem 'hoptoad_notifier'
    gem 'braintree'
    gem 'panda'
    
    # Templating
    gem 'liquid', '2.0.0'
    
    # Users
    gem 'warden'
    gem 'ruby-openid', :require => 'openid'
    gem 'canable'
    gem 'devise'
    
    # Paperclip
    gem 'aws-s3', :require => 'aws/s3'
    gem 'paperclip', :git => 'git://github.com/dewski/paperclip.git', :branch => 'rails3'
    gem 'delayed_job', :git => 'git://github.com/dewski/delayed_job.git'
    
    group :test do
      gem 'webrat'
      gem 'hpricot'
      gem 'mocha', :require => false
    end
    

    如果我创建一个新的Rails应用程序,错误页面会立即显示。在Rails源代码中 SHOW TABLES 是 structure_dump 在里面 schema_statements.rb .我在bundler目录中搜索了对该方法的任何调用,但没有显示任何内容。这是什么原因,又是如何造成的 展示桌子 一次又一次地被调用,可能会使每个方法都很难调试?

    2 回复  |  直到 16 年前
        1
  •  20
  •   Lawrence    15 年前

    我们在公司遇到了这个问题,在等待Rails point正式发布时,我们进行了一次黑客攻击。另一个答案中链接的灯塔票中提到的关键问题似乎是,对于某些应用程序, request.env 包含一些 #inspect 输出是巨大的(比如,兆字节的文本),这些输出都会被放入错误页面。

    这就是:

    # development.rb
    
    config.after_initialize do    
      module SmallInspect
        def inspect
          "<#{self.class.name} - tooooo long>"
        end
      end
      [ActionDispatch::RemoteIp::RemoteIpGetter, OmniAuth::Strategies::Facebook, ActionController::Base, Warden::Proxy].each do |klazz|
        klazz.send(:include, SmallInspect)
      end
    end
    

    列出的班级是我们的罪魁祸首;根据应用程序的不同,您的应用程序也会有所不同。

        2
  •  0
  •   ajh    15 年前

    rails项目中也有类似的问题: https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/5027

    我的测试套件中也有同样的问题,但尚未找到解决方案。

    推荐文章