3

私たちの Rails アプリは、完全に文字化けした URL を受け取り、Rack でURI::InvalidURIError. 次に、例外通知システム (HoneyBadger) がこのエラーの通知を受け取ります。

ただし、これらのエラーについては知りたくありません。Rack が (可能であれば) ログに記録し、飲み込んでくれることを望みます。

アプリはActionController::RoutingErrorこれを介して処理しますroutes.rb:

# Default route, because these would normally not go through the application rescue_from block
match('*path', to: 'application#routing_error') unless Rails.env.development?

...そして、ルーティングエラーが発生したときにログに記録します(通知はしません)ApplicationController#routing_error

ただし、この無効な URI エラーは、ルートが URL を確認する前に発生します。

問題の原因となる URL の例を次に示します (もちろん、ドメイン名は変更されています) http://www.whatever.com/HD2EU]。そして続くスタックトレース:

[PROJECT_ROOT]/vendor/ruby-1.9.3/lib/ruby/1.9.1/uri/common.rb:176:in `split`
[PROJECT_ROOT]/vendor/ruby-1.9.3/lib/ruby/1.9.1/uri/common.rb:211:in `parse`
[PROJECT_ROOT]/vendor/ruby-1.9.3/lib/ruby/1.9.1/uri/common.rb:747:in `parse`
[PROJECT_ROOT]/vendor/ruby-1.9.3/lib/ruby/1.9.1/uri/common.rb:994:in `URI`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/rack-ssl-1.3.3/lib/rack/ssl.rb:50:in `redirect_to_https`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/rack-ssl-1.3.3/lib/rack/ssl.rb:32:in `call`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:136:in `forward`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:245:in `fetch`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:185:in `lookup`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:66:in `call!`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/rack-cache-1.2/lib/rack/cache/context.rb:51:in `call`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/engine.rb:479:in `call`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:223:in `call`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/railtie/configurable.rb:30:in `method_missing`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/unicorn-4.6.3/lib/unicorn/http_server.rb:552:in `process_client`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/unicorn-4.6.3/lib/unicorn/http_server.rb:632:in `worker_loop`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/newrelic_rpm-3.6.5.130/lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb:22:in `call`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/newrelic_rpm-3.6.5.130/lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb:22:in `block (4 levels) in <top (required)>`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/unicorn-4.6.3/lib/unicorn/http_server.rb:500:in `spawn_missing_workers`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/unicorn-4.6.3/lib/unicorn/http_server.rb:142:in `start`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/unicorn-4.6.3/bin/unicorn:126:in `<top (required)>`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/bin/unicorn:23:in `load`
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/bin/unicorn:23:in `<main>`
4

1 に答える 1

1

これを Honeybadger.rb 初期化子に追加するだけで終わりました。

config.ignore << URI::InvalidURIError

于 2014-05-08T18:43:23.273 に答える