神秘的铁轨错误几乎没有任何痕迹
我们遇到一个爬虫的奇怪问题。 有时它会在某些请求上抛出Rails FATAL
错误,但跟踪非常有限并且看起来像这样
[2014-07-01 18:16:37] FATAL Rails : ArgumentError (invalid %-encoding (c ^ FK+ 9u$_ t Kl ΥE! =k \ ̕* ߚ>c+ CR! 2 D (5 xq#!` 4 p |8 IE :+ H^9`^ # Vo{ > =[z )): lib/locale_middleware.rb:14:in `call'
爬虫用户代理是
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
特别感谢Benjamin Sinclaire 在github上指出正确的问题 。
解决方案在此评论中描述:
- 安装机架坚固性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