【发布时间】:2014-08-28 00:13:17
【问题描述】:
我们的一个爬虫遇到了一个奇怪的问题。有时它会在某些请求上抛出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 (compatible; EasouSpider; +http://www.easou.com/search/spider.html)
我们可以通过robots.txt 要求它停止抓取我们,但最好处理根本原因,如果可能的话,不要在这些请求上失败并返回 500。
我们也无法真正重现此类请求,因此任何有关如何生成类似请求的建议都会有很大帮助。
我们在 Ubuntu 12.04 上使用 Rails 3.2.19,Unicorn。这是我们的locale_middleware.rb
【问题讨论】:
-
您可以通过在您的请求网址中添加
?%9g来复制吗?例如:your.site/path/to/a/get?%9g -
我猜异常发生在下一个中间件层。 LocaleMiddleware 之后发生了什么?你可以运行
rake middleware -
@BenjaminSinclaire - 添加
?%9g似乎会从我们的nginx 产生400响应,它甚至没有命中轨道。但是,您是从哪里拿到这个%9g的? (我越来越好奇) -
@PavelEvstigneev - 在 LocaleMiddleware 之后我们有
Omniauth::Builder,之后是我们的应用程序路由。
标签: ruby-on-rails encoding web-crawler fatal-error