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本身。此外,我在上述代码段中添加了一个记录器方法,除了这些编码问题之外,没有发现任何其他问题目前为止