Страницы исключений в режиме разработки занимают более 15-30 секунд, почему? - PullRequest
6 голосов
/ 25 июня 2010

Я использую 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. Я искал в своем каталоге пакетов любой вызов этого метода, и он ничего не показывает. Что дает и как это может быть вызвано тем, что SHOW TABLES вызывается снова и снова и, возможно, делает его таким, что каждый метод причиняет боль при отладке?

Ответы [ 2 ]

20 голосов
/ 19 марта 2011

Мы столкнулись с этой проблемой в нашей компании, и, пока мы ждем официального релиза Rails, собрали взломать.Ключевой вопрос, как упомянуто в заявке Lighthouse, связанной с другим ответом, заключается в том, что для некоторых приложений 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

Перечисленные классы являются для нас основными виновниками;Ваш будет зависеть от вашего приложения.

0 голосов
/ 12 марта 2011

В проекте rails есть билет на похожую проблему: https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/5027

У меня та же проблема в моем наборе тестов, и я еще не нашел решения.

...