使用google app engine的一些笔记

这几天在appengine上倒腾jruby+sinatra,不亦乐乎。

在使用google的xmpp服务时出了问题:按照约定,在/_ah/xmpp/message/chat/处理POST来的request就能实现接收xmpp消息了,不过上传到appengine后,一往app发信息就报错,看意思rack有创建文件的操作。

这里要说明两点,其一,appengine的java sdk还没有任何方法测试xmpp,我几乎只能deploy上去之后才能试一下,极其痛苦;其二,appengine在云里,所以不支持创建文件。

仔细看了看appengine的文档,这个POST是multiparts/form编码,然后一看rack 1.1.0的代码,只要是这么编码,rack都创建一个TempFile来存储,估计是担心内存的问题。

于是对rack的parse_multipars一顿改,别的没变,就把文件换成了String,问题解决。期间不断上传,继而垂头丧气地跑到admin console的log里看exception,十分煎熬。

不过现在已经抓到了google在这个URL上POST的数据,基本上可以本地测试了。

 

另外,介绍些Jruby On GAE的心得:

为了尽量减少往appengine上上传的文件,可以精简一下,像我只用了sinatra框架的,上传的gem中只有sinatra自己,因为rack已经在jruby-rack的jar包中了。但是还是需要在WEB-INF\gems\specifications中加上rack-1.1.0.gemspec文件,这个用来骗sinatra,一旦骗过了sinatra,sinatra用到的rack其实都是jar包中的了。

推荐用Marshal来序列化和反序列化对象之后(序列化之后是一个String对象)使用cache服务。虽然Ruby的String和Java的String之间会自动转换,但是尽量让你的对象中都是symbol或string,否则(比如bignum)序列化后生成的String再转换为Java的String的过程中会丢失一些东西,导致下次读取的时候格式错误。

 

毕设已经有了现成的,关键是要看懂,哎,怎么就分到了个开发Windows桌面程序的部门呢?还好今后主要不是去折腾恶心的MFC,而是D3D。

 

你可能感兴趣的:(脚本,Ruby,jruby,rack,Sinatra)