神秘的铁轨错误,几乎没有任何痕迹

gin*_*ime 7 encoding ruby-on-rails web-crawler fatal-error

我们遇到一个爬虫的奇怪问题.有时它会Rails FATAL在某些请求上抛出错误,但跟踪非常有限并且看起来像这样

[2014-07-01 18:16:37] FATAL Rails :
ArgumentError (invalid %-encoding (c ^   FK+ 9u$_    t  Kl
?E!   =k \  ?* ?>c+<O   ?o ?> C     R! 2 D  (5      x q#!` 4 p      |8 I   E
:+   H^9`^ #    Vo{   >

  =[z     )):
  lib/locale_middleware.rb:14:in `call'
Run Code Online (Sandbox Code Playgroud)

爬虫用户代理是

Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html)

我们可以要求它停止通过我们爬行robots.txt,但是如果可能的话,最好处理根本原因并且不会因为这些请求而失败500.

我们也无法真正重现这种请求,因此有关如何生成类似请求的任何建议都会有很大帮助.

我们在Ubuntu 12.04上使用Rails 3.2.19,Unicorn.这是我们的locale_middleware.rb

gin*_*ime 4

特别感谢 Benjamin Sinclaire在 github 上指出了正确的问题

此评论描述了该解决方案:

config.middleware.use ::Rack::Robustness do |g|
  g.no_catch_all
  g.on(ArgumentError) { |ex| 400 }
  g.content_type 'text/plain'
  g.body{ |ex| ex.message }
  g.ensure(true) { |ex| env['rack.errors'].write(ex.message) }
end
Run Code Online (Sandbox Code Playgroud)

  • 这是否捕获每个“ArgumentError”,包括那些与编码错误无关的错误?我认为确实如此,但这可能会产生问题。如果您不希望这样,[请参阅此解决方案](http://stackoverflow.com/a/24727310/6962)。 (2认同)