Ruby on Rails: 给Redmine做插件

这段时间,有个跟合作公司一起做的项目,其间涉及到大量的Buglist交换。我们使用的跟踪系统是Redmine,简洁好用,但偏偏没有Bug导入功能,QA的同事只好手工操作,很是辛苦。

上周五我花了一个晚上的时间,Google来,Google去,最终找到了Piroli UENISHI做的Redmine CSV Importer。可惜这个Plugin只能导入由Redmine导出的CSV文件,并且不能处理自定义字段,还是不合用。

周六早上一醒来,发现天黑黑的,恐怕是随时都要下雨,心想今天不会有户外活动了,不如自己动手做一个Plugin吧。马上开工。

Redmine是基于Ruby on Rails的应用。以前在考察应用程序框架时,曾经看过37signals写的数篇介绍文章,还记得大概的架构。但一动手,立刻发现Ruby和Rails并不像想象中的那么容易上手。从头学肯定是小题大作了,要在这个周末做完,必须得想点速成的办法。

从以往的经验来看,速成需要借助工具,特别是集成得非常好的IDE。Google一下,嗯,最受推崇的工具是Aptana Studio,基于熟悉的Eclipse,大部分功能都支持Mac,下载来试试。

Aptana的确不错,导入Redmine的源代码,很快就跑起来了。继续看Redmine的Plugin制作教程,一步步做了一个新的插件,把大概要用到的东西熟悉了一下。其中有个2个地方花了不少时间:

  • Radio field与其他field的关联动作。没有框架时,肯定是自己写一个Javascript了,但我觉得RoR应该有自己的办法。最后搜到了CSDN上的一个帖子,也是说要用Javascript。一边乱翻RoR的API文档,一边正准备放弃,突然发现ActionView::Helpers::PrototypeHelper里面有个observe_field,解决问题。
  • Redmine下action间传递上传文件的名字或句柄。这个让我很挠头。本来RoR提供了ActionController::Flash,但Redmine居然把Flash Hash中的所有元素都当作需要显示的内容了。找来找去,没有更好的办法,还是自己用session来传递参数。

终于,经过充分利用周末里各种“见缝插针”的时间,0.1.0版出炉了。明天拿给同事们品评试用一番了。

4月1日补充:做好的plugin在这里发布,为了更多的Redmine用户能够用到这个插件,写成了英文版。

参考资料:

Leave a Reply

Your email address will not be published. Required fields are marked *