热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JRubyonRails的真实案例:传染病报告与处理系统

越来越多的项目都在使用JRuby和JRubyonRails。在Mingle、OracleMix和Sun重写的mediacast.sun.com之后,又一个使用JRub

越来越多的项目都在使用JRuby和JRuby on Rails。在Mingle、Oracle Mix和Sun重写的mediacast.sun.com之后,又一个使用JRuby on Rails的新项目浮出水面。

\u0026#xD;\n

媒体是这样报道的:

\u0026#xD;\n
Collaborative Software Initiative (CSI)是一家把志趣相投的组织联合在一起,用很少的成本联合开发软件的公司。今天,CSI发布了其第一个基于网络的开源传染病报告和处理系统。

犹他州牵头的此疾病报告和处理系统将会在开源许可模式下,今年晚些时候推广到全部50个州。该系统不仅能帮助本地健康部门对个体案例和本地传染病群进行早期检测和调查,同时也能满足州和联邦对疾病爆发控制、疾病监控和流行病学研究的需求。

\u0026#xD;\n

要注意的是,新闻还提到了这一点:该项目使用JRuby。我们采访了Collaborative Software Initiative的项目经理Mike Herrick,来谈一谈在此项目中使用JRuby的经验。

InfoQ:能不能简要概括一下你们所实现的软件?哪些部分使用了JRuby?主要是网站吗?有没有涉及(商业)逻辑的部分——这些部分也是用JRuby实现的吗?

\u0026#xD;\n
再过6个月,这个应用程序就达到两年的开发周期了(根据《精益软件开发》)。目前为止用的都是 JRuby。现在还都是网络程序,但在我们广阔的蓝图中还包括有分析程序、离线客户端和大量的整合工作。我们还没决定这些部分要用什么技术,不过我们想尽 量还用JRuby和Java。
\u0026#xD;\n

InfoQ:你们用了JRuby and Rails的哪些技术?使用什么服务引擎(servlet engine)?有没有用过Warbler或者别的什么工具?

\u0026#xD;\n
\u0026#xD;\n

我们在Java 6和JRuby 1.1.1中使用这些程序包(gems):
 * Rails 2.0.2
 * hpricot
 * mechanize
 * postgres-pr

我们还使用了如下这些Rails插件:

\u0026#xD;\n
  • \u0026#xD;\n

    auto_complete

    \u0026#xD;\n \u0026#xD;\n
  • \u0026#xD;\n

    validates_date_time

    \u0026#xD;\n \u0026#xD;\n
  • \u0026#xD;\n

    model_auto_completer

    \u0026#xD;\n \u0026#xD;\n
  • \u0026#xD;\n

    haml

    \u0026#xD;\n \u0026#xD;\n
  • \u0026#xD;\n

    calendar_date_select

    \u0026#xD;\n \u0026#xD;\n
  • \u0026#xD;\n

    betternestedset

    \u0026#xD;\n \u0026#xD;\n
  • \u0026#xD;\n \u0026#xD;\n \u0026#xD;\n

我们也在开发一个插件,叫做acts_as_auditable。如果成功的话,可能在开放整个项目之前先开放它。我们做测 试用的是RSpec和Selenium Grid(也使用RSpec),做持续整合(Continuous Integration)是用Hudson,而开发工具则使用NetBeans和vim。

数据库用的是PostgreSQL。我们之前考虑过用Solr来做全文搜索,后来还是选择用PostgreSQL来做,因为它既能满足我们的需求,又不用引入新的可动部件。

服务引擎用的是Tomcat,它工作得很好。我们了解了GlassFish的很多信息,打算试一下。Warbler非常棒。Nick Sieger还让它变得更好用(抛弃了原先基于Goldspike的包)。我们也为JRuby社区做了一点贡献,在Warbler刚发布在JRuby wiki上时,我们提供了怎样在Rails 2上使用Warbler的详细文档。我还写了一篇博客文章来介绍Warbler并指向它的wiki页面,至今为止,每天都有很多大公司来点击。我把这看成是JRuby正在被接受的标志。

\u0026#xD;\n
\u0026#xD;\n

InfoQ:从上面链接的信息中可以看出,项目的团队很大——有多少人在编写JRuby代码?

\u0026#xD;\n
\u0026#xD;\n

Collaborative Software Initiative (CSI) 利用社区的力量来组建项目团队,并为开发协作软件提供了中心项目管理服务,包括开发、测试和持续的代码支持。CSI使用开源许可模型或者软件即服务 (SaaS)模型来把软件分发给大量用户。我们的公共健康社区现在有100多人。社区是由学科问题专家(Subject Matter Experts,SMEs)和开发者组成的。其中,学科问题专家包括流行病学家、护士和医师。核心团队包括10名学科问题专家和5名开发者。还有两名兼职开发者。在七名开发者中,有四五个都积极使用JRuby。Ed Copony和Pete Lacey是该项目的高级开发者。另外,我们还在招募一位核心开发者。

\u0026#xD;\n
\u0026#xD;\n

InfoQ:你在使用JRuby on Rails时遇到过哪些问题?是怎样解决的?(工具,解决办法,给JRuby团队报告bug)?

\u0026#xD;\n
\u0026#xD;\n

在每天结束时,即使在我们这样的理想状况下,开发核心的软件也非常难。我们雇佣了知名的专家来组成开发团队。不论好坏,我们有 一些JRuby、Ruby和Rails的开发经验,但也不是太丰富。Collaborative Software Initiative的金融服务项目主管Ross Cooperman有丰富的MRI Ruby和Rails经验。他在项目的初期引领我们走在正确的方向上。不过学习起来自然就绕了点弯路。一旦走过去,Ruby和Rails是非常高产的,然 而这并不能一蹴而就。我们曾有过一段难捱的日子,不过现在的问题少多了。

\u0026#xD;\n

一路上我们依靠过JRuby邮件列表 、wiki和聊天室(IRC)。社区也给了我们很多帮助。在Rails 2.0第一次发布时,我发现了Goldspike(JRuby Rails服务程序)的一个bug:http://jira.codehaus.org/browse/JRUBY-1879。我们和社区一起只用了一个周末就解决了这个问题。三月份,在我们第一次发布软件之前的那几天,JRuby 1.1也即将发布。可是我们突然发现了一个bug,于是就无法像之前希望的那样跟JRuby 1.1一起发布了:http://jira.codehaus.org/browse/JRUBY-2314。JRuby社区马上集结起来,迅速解决了问题,让我们的软件最终和JRuby 1.1一起发布了。

\u0026#xD;\n
\u0026#xD;\n

InfoQ:为什么用JRuby而不用常规的Ruby?

\u0026#xD;\n
\u0026#xD;\n

我们选择JRuby而不是MRI有很多原因:

\u0026#xD;\n
  • 容易部署 \u0026#xD;\n
  • 全球所有的企业都在用Java \u0026#xD;\n
  • 我们的开发团队有Java积累 \u0026#xD;\n
  • 我们的项目将来必须是可以扩展的,而单独靠Ruby恐怕很难做到\u0026#xD;\n

我们希望其背后的语言是Java而不是C。 

\u0026#xD;\n
\u0026#xD;\n

InfoQ:你希望在JRuby和JRuby on Rails软件栈中看到哪些功能和改进?

\u0026#xD;\n
\u0026#xD;\n

JRuby社区的推动力给我们留下了无与伦比的深刻印象。它既有雄心也讲究实用。其核心团队由一些杰出的开发者组成。他们眼光很准,好像总在关注正确的东西。他们追求更好的Java集成和持续的性能改进,并和JVM开发者协作改进各种动态语言的JVM。这些都很棒。

\u0026#xD;\n

我也曾向Pete和Ed提出这个问题。他们主要谈了Rails,而不是专门针对JRuby。我们想看到更好的多模型支持,也许 是通过嵌套的has_many和has_one。我们也想看到更加一贯的验证支持,包括把验证错误上报至顶层模型。还希望看到更加灵活的URL格式,也许 包括URI模板。

\u0026#xD;\n

根据我们目前的经验,Rails非常棒。我刚才提到,JRuby和Rails是非常高产的 环境。但我们正在构建的是一个大型应用程序——不论采用什么技术,都有非常大的工作量。我们当然希望看到明显高于Java和Java and Sping的生产效率,但Rails也不是终极武器。有人说,Ruby社区中有很多创新的工具和想法,即使在艰难的学习道路的上,Rails也给我们带来 了许多欢乐时刻。

\u0026#xD;\n
\u0026#xD;\n

InfoQ:你希望Ruby语言和标准库将来增加哪些功能?

\u0026#xD;\n
依我们的经验,JRuby就挺好了。我们曾有个议题专门比较JRuby和MRI的兼容性。当然了,现在还有一些程序包没有移植到Java上,但又不是非得用它们。
\u0026#xD;\n

InfoQ:用JRuby作为实现技术,让人(管理层和客户)接受这点有没有遇到什么问题?如果遇到过的话,你是怎样对付的?

\u0026#xD;\n
\u0026#xD;\n

我们与合作方之间没有遇到过这样的问题,因为对他们来说,这只不过是Java而已。我们现在的部署包里面有数据库脚本和.war文件。在我们实现蓝图的路上,还会有更多的可动部件,然而这不过都是些典型的JEE应用程序罢了。

Collaborative Software Initiative是一个崇尚贤能政策的公司。在项目开始的时候,我们讨论了到底要用Ruby(MRI)、Python、Java \u0026amp; Spring、JRuby \u0026amp; Rails \u0026amp; Java、JRuby \u0026amp; Merb \u0026amp; Java、PHP,还是别的。这个问题最终归结为推动力。Ruby语言有很强的推动力。Ruby的虚拟机实现有很多不同的版本,而且这些语言实现者还可以 协作。在我们看来,它是个非常好的东西。我们斟酌了所有的选择,对社区进行了评估,经过友好的辩论,最后投票表决。JRuby的发展轨迹给我们留下了深刻 印象。在我们看来,它完全到了用来生产的阶段。最终我们决定,根据项目和团队的情况,JRuby、Rails和Java是最适合的。当然我们并不是反对其 他选项,但我们的确做了一个至今都还令人满意的决定。

\u0026#xD;\n
\u0026#xD;\n

你有没有在重要的网络应用程序中使用过JRuby on Rails呢?

\u0026#xD;\n

查看原文:Real world JRuby on Rails: Infectious disease reporting and management


推荐阅读
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 广度优先遍历(BFS)算法的概述、代码实现和应用
    本文介绍了广度优先遍历(BFS)算法的概述、邻接矩阵和邻接表的代码实现,并讨论了BFS在求解最短路径或最短步数问题上的应用。以LeetCode中的934.最短的桥为例,详细阐述了BFS的具体思路和代码实现。最后,推荐了一些相关的BFS算法题目供大家练习。 ... [详细]
  • 关于extjs开发实战pdf的信息
    本文目录一览:1、extjs实用开发指南2、本 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 前端开发工程师必读书籍有哪些值得推荐?我们直接进入代码复杂版式设置,如下所示,先写些标签,源码在这个链接里面:https://codepen.io/Shadid ... [详细]
  • Highcharts翻译系列之二十:曲线图例子(二)
    Highcharts翻译系列之二十:曲线图例子(二)代码 ... [详细]
  • Lucene 全文检索技术入门
    一、搜索引擎的历史萌芽:Archie、Gopher起步:Robot(网络机器人)的出现与spider(网络爬虫)发展:excite、galax ... [详细]
  • 首先我们在taotao-search-interface工程中新建一个SearchService接口,并在接口中添加一个方法,如下图所示。接着,我们到taotao-search-s ... [详细]
  • solr倒排索引(转载)
    原文地址:http:blog.csdn.netchichengitarticledetails9235157http:blog.csdn.netnjpjsoftdevarticle ... [详细]
  • Flume 开源分布式日志收集系统
    为什么80%的码农都做不了架构师?Flume--开源分布式日志收集系统Flume是Cloudera提供的一个高可用的、高可靠的开源分布式海量日志收集系统 ... [详细]
  • javajigsaw2015年12月1日,星期二,在OpenJDK邮件列表中,MarkReinhold确认了许多人的期望:J ... [详细]
author-avatar
金玉的海角_745
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有