Rails Rails 爬虫过来发生错误的问题

linjunhalida · 2012年01月11日 · 最后由 linjunhalida 回复于 2012年05月09日 · 3907 次阅读

以前偶尔出现这样的问题,一直没有管它:

A ActionView::MissingTemplate occurred in ideas#show:
...

 * CONTENT_LENGTH                                 : 0
 * DOCUMENT_ROOT                                  : /home/railsdeploy/gurudigger/public
 * HTTP_ACCEPT                                    : */*;q=0.9
 * HTTP_ACCEPT_ENCODING                           : gzip,deflate
 * HTTP_CONNECTION                                : Keep-alive
 * HTTP_FROM                                      : googlebot(at)googlebot.com
 * HTTP_HOST                                      : gurudigger.com
 * HTTP_USER_AGENT                                : DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)

后来越来越多,调查了一下,发现是 google 的 bot, stackoverflow 上面讨论过这样的问题: http://stackoverflow.com/questions/5944859/actionviewmissingtemplate-error-only-when-visited-by-a-bot

请问大家是否也会遇到这样的问题,以及解法?谢谢。

我没遇到这个问题,倒是遇到了搜狗爬虫乱搞编码搞出一堆 500error....

哈,编码问题的 error 我也看到了,还有加上 rar 后缀的,不知道它们在干什么。

一样的机器人 - -我也遇到同样的问题 66.249.68.214 目测楼主网站屏蔽了国外流量, 这些错误有个共通点是请求 format 要么 nil 要么/,都是 google 的手机爬虫。

head = env["HTTP_ACCEPT"].to_s
env["HTTP_ACCEPT"] = "text/html" if (head.empty? || head =~ /\/\*/) 


用这个方法试试,这个错误我一直忽略,不敢动 orz

这个也是我一直比较烦的事情,日志里面的 500 几乎都是爬虫搞的

#4 楼 @huacnlee ruby-china 都有的话应该就不关屏蔽流量的事了... 明天发布实装下我提到的方法试试,因为这个问题隔段时间才发生难测试啊,不知道能不能通过 robots.txt 限制解决. ps:好像 ruby-china 对这些的处理都是 nginx 的?很多这类错误可以在 controller 捕获一下也不错

#5 楼 @pokkalee 前面几句没看明白

#3 楼 @pokkalee 这个方法不行...还会影响到其他请求... 在试这个

head = env["HTTP_ACCEPT"].to_s
env["HTTP_ACCEPT"] = "text/html" if (head.empty? || head == '*/*;q=0.9')


但感觉太针对性了,有点杀鸡牛刀的感觉。

#6 楼 @huacnlee sorry,大意就是这个问题初步估计可能是爬虫的env["HTTP_ACCEPT"]引起的,但这类错误没能经常看到或者难重现,所以解决起来比较麻烦。

env["HTTP_ACCEPT"]表示浏览器能识别的类型,我越来越觉得是 google*手机*爬虫才会引起这些错误了...

#2 楼 @linjunhalida 直接在 Nginx、apache 上过滤掉 之前在遇到过导致大量的这种日志 后来就没了

#5 楼 @pokkalee @huacnlee 这种问题 直接在 nginx 上处理吧 不用让程序的 controller 来处理吧

http://my.oschina.net/javagg/blog/3312 如:

location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
     if ($http_referer ~* javagg.com) {
     #rewrite ^/ http://www.javagg.com/403.html;
     return 403;
      }
}

还在讨论?我用的是 stackoverflow 上面的解法,重置一下 HTTP_ACCEPT。

#9 楼 @kewin 受益匪浅,谢谢

#12 楼 @linjunhalida 我现在也在试重置,但怕影响爬虫行为,你重置了哪些类型的?

@pokkalee 就是上面的 stackoverflow 的解法。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号