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

Ruby on rails 神秘的rails错误,几乎没有任何痕迹,ruby-on-rails,encoding,web-crawler,fatal-error,Ruby On Rails,Encoding,Web Crawler,Fatal Error,一个爬虫有个奇怪的问题。有时它会在某些请求上抛出一个Rails致命的错误,但是跟踪非常有限,看起来像这样 [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`^ #

一个爬虫有个奇怪的问题。有时它会在某些请求上抛出一个
Rails致命的
错误,但是跟踪非常有限,看起来像这样

[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'
[2014-07-0118:16:37]致命的铁轨:
ArgumentError(无效)-编码(c^FK+9u$\uT Kl
ΥE!=k\̕*ߚ>c+cr!2d(5xq)!`4p | 8ie
:+H^9`^ Vo{>
=[z]:
lib/locale_middleware.rb:14:in'call'
爬虫用户代理是

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

我们可以要求它停止通过
robots.txt
抓取我们,但最好处理根本原因,如果可能的话,不要让500个请求失败

我们也不能真的复制这种请求,所以任何关于如何生成类似请求的建议都会有很大帮助


我们使用的是Rails 3.2.19,Ubuntu12.04上的Unicorn。这是我们的

特别感谢Benjamin Sinclaire指出了这个问题

解决方案如下所述:

  • 安装gem
  • 将此添加到
    application.rb
config.middleware.use::Rack::Robustness do | g|
g、 不,一网打尽
g、 关于(ArgumentError){| ex | 400}
g、 内容\类型为“文本/普通”
g、 正文{| ex | ex.message}
g、 确保(true){ex|env['rack.errors'].write(ex.message)}
结束

您可以通过在请求url中添加
?%9g
来复制吗?示例:我猜在下一个中间件层中会发生异常。LocaleMiddleware之后会发生什么?您可以运行
rake middleware
@BenjaminInclaire-添加
?%9g
从我们的nginx生成
400
响应,它甚至没有击中rails。然而,你是在哪里找到这个
%9g
的??(我开始好奇了)@PavelEvstigneev-在LocaleMiddleware之后,我们有了
Omniauth::Builder
,然后我们的应用程序路由。这里是否捕捉到了每个
参数错误,包括那些与编码错误无关的错误?我想是的,这可能会有问题。如果你不想这样做,据我所知,这会捕捉到从应用程序外部抛出的
ArgumentError
。无论如何,我们都会在应用程序控制器的代码库中捕获
ArgumentErrors
。因此,暴露仅在代码库之外,例如中间件/Rails本身。此外,我在上述代码段中添加了一个记录器方法,除了这些编码问题之外,没有发现任何其他问题目前为止