2006年7月16日星期日

Scully on Rails,我的第一个Rails应用

这周完成了我的第一个Rails作品,我叫它Scully on Rails。

这个说起来还有点儿历史。我们的手机软件内部有个错误纪录系统。当出现重启之类问题的时候,会在文件系统中建立一个纪录文件。这个文件叫做X- File,是二进制文件,不能直接阅读内容。需要用工具将文件解码成文本信息,这个工具就是Scully。Scully是一个用Python写的脚本,各 种参数很多,使用比较麻烦。更麻烦的是,要解码一个X-File,还需要三、四个其他文件的支持以及另外一个分析工具,所以要把整个环境配制好,还是很费 功夫的。

所以我就考虑做一个Web应用,通过浏览器,将需要的文件上传到服务器,服务器在后台调用Scully,然后把得到的文本信息结果返回给用户,这样只要配制一套环境,大家就都可以用了。

Rails是以简单、快速著称的。但是真用起来,尤其是我这样的新手,还是有不小的门槛。特别是在几个问题上,我还是颇费了些功夫。

  • Form数据的传递。我比较喜欢使用比较低级的Form元素方法,诸如start_form_tag、text_field_tag之类。我觉得 它们能够提供比较灵活、快速的数据传递,不需要跟一个对象绑定,使用方便。但是上传的数据如何以何种形式存在params里,我却不甚了了,特别是 RadioBox。费了不少功夫试验。这里不得不抱怨一下Rails文挡,写的实在不怎么清楚;
  • 文件上传。对于不同大小的文件上传,Rails会产生不一样的结果。小于4k的文件,Rails直接生成一个StringIO的对象,大于的则生 成一个临时文件(Tempfile对象)。这种区别对于我的需要来说是很大的。我只要把上传的文件改个名字,然后拷贝到别的地方。这时候StringIO 就不很方便,还需要转换。关键是我起初并不知道有这样的区别,以为都是生成临时文件,走了弯路;
  • CSS的一个小trick也让我喝了一小壶。开始我把display: none;写到了CSS文件里面,然后用JavaScript写Element.show(’busy’),居然不起作用。试了半天才发现必须写成
  • 最后是一个目前没法解决的问题:Ajax不支持文件上传!这是JavaScript的限制,没商量。所以要做到漂亮的上传效果需要一些hack,不过我目前没时间弄。

总的来说,看多少资料也不如亲自动手做一个哪怕最简单的实例。

1 条评论:

Unknown 说...

FastTrace直接就解码了,大哥。Scully过时了。