ruby-on-rails – 神秘的rails错误,几乎没有任何痕迹

我们遇到一个爬虫的奇怪问题.有时它会在某些请求上抛出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'

爬虫用户代理是

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

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

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

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

解决方法

特别感谢Benjamin Sinclaire指出 right issue on github.

该解决方案描述于on this comment

>安装rack-robustness gem
>将此添加到application.rb:

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...