Razor抓虫记

目录

昨天因为一个问题,跟razor掐了一天,今天终于有空总结一下。 问题的起因是想做两件事:一是把razor的地址查询从在线查询的方式修改为使用离线数据,二是讲原来直接插入数据库的数据先缓存到redis,再定期写入mysql数据库。做这两件事情的时候就遇到坑了。

首先需要说明的是,我的razor使用的是0.4的版本,因为项目其他事情的原因,一直没有升级到最新的版本。中间为razor增加了一些特性,也一直没有合并进razor的主库,这也引起了后面的一些问题。

按照razor官方的说明,我修改了config/config.php文件,把config[‘get_geographical’]的值修改为了1.然后等啊等啊等,结果发现还是会通过在线的api请求ip数据……没辙,翻开service模块的代码,发现0,4版本的时候根本就不支持离线数据的方式-v -   果断从网上拽下来了0.6版本的代码替换了,bingo!不过有点问题的是,从离线文件中读取出来的数据名称都是英文,而原来是中文的,杯具了……我忍。但是在日志中发现有部分数据的city字段读出来是乱码…… 这个就没法破了,继续忍。在nginx日志中发现有请求的响应是500,那应该是内部错误啊?php不太熟,只好去挖php的日志文件,在网上找到通过修改php配置文件,把php fpm的日志输出,结果发现一段日志:
[17-Sep-2013 17:01:41] PHP Fatal error:  Cannot redeclare geoip_load_shared_mem() (previously declared in /home/workspace/razor/geoip.inc:240) in /home/workspace/razor/geoip.inc on line 256

呃,geoip文件的代码在这里,虽然不懂php,不过按照粗略的观察来看,这个报错很诡异。最后的办法只能是放弃了,改回原来在线获取数据的方式……代价就是更多的网络IO和部分的504 ╮(╯▽╰)╭

另外一个问题就是引入redis的支持了。本来如果是razor原版的代码没有改动,直接引入redis是很简单的,安装完redis之后修改一下配置文件就行,但是因为对razor做过一些定制,这里就再次掉坑了。redis的service模块代码位于models/redis_service目录下,基本代码结构和service目录下差不多,因为我改过event.php,支持事件接口上传deviceid,所以这里也要做对应的修改。没有改的结果就是导致昨天一整天的日志丢了deviceid,基本是废了……