ArgumentError (redundant UTF-8 sequence)
前几天在windows下用jruby创建了个应用,用了geokit的gem,连接的是sqlserver的数据库。
geokit在jruby下是由于使用的是jdbc-mssql的adapter,名称和matz ruby环境下的不一致,所以会报找不到adapter的错,只用把名称改为SQLSever就可以了。
但是还会出个问题,就是geokit中的geo_scope后不能跟limit,报distance field不识别,看sql log发现jdbc的limit通过生成row_num然后通过row_num in range的搞法搞定,这是jdbc adapter的个bug,懒得理他,直接用array slice搞定。
今天终于搞了个rhel 5的服务器,就忙着将程序迁移到rvm 的1.9.2上。同时改用tiny_tds加activerecord-sqlserver-adapter,结果碰到了ArgumentError (redundant UTF-8 sequence),都是在to_json的时候产生的。
google了一番,有人报这个错给active_support,结果support的开发人员认为这不是他们的bug,把issue的状态变为stale,不做任何更新。我一向认为开源人的敬业精神是不错的,所以这次也继续相信他。从配置上找原因。
对to_json的对象log之后发现都是乱码,觉得这是database connection的问题。查阅了tiny_tds和freetds的文档,发现根本问题是freetds的版本太落后,yum版的根本没有按照tiny的要求更新到9.2。所以把freetds的source 下下来,重新make了一番,问题就神奇般的OK了。
而且在matz ruby下,geokit的limit问题也解决了。
看样子,开源的东西本身还是值得信赖的,关键需要看你有没有能力组合起来。