热门标签 | 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


推荐阅读
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 基于域名、端口和IP的虚拟主机构建方案
    本文探讨了在单台物理服务器上构建多个Web站点的虚拟主机方案,详细介绍了三种主要的虚拟主机类型:基于域名、基于IP地址和基于端口的虚拟主机。每种类型的实现方式及其优缺点均进行了深入分析,为实际应用提供了全面的技术指导。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 如何在PHP中正确配置错误显示功能
    在PHP中正确配置错误显示功能的方法如下:首先,定位并打开“php.ini”配置文件;接着,将“display_errors”参数设置为“On”;最后,在PHP代码文件的顶部添加 `ini_set('display_errors', '1');` 以确保错误信息能够被正确显示。此外,建议在开发环境中启用此功能,而在生产环境中禁用,以避免敏感信息泄露。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 在CentOS上部署并使用FFmpeg多媒体处理工具
    最近在进行音频处理时需要用到FFmpeg,本文将详细介绍如何在CentOS系统上部署并使用这一强大的多媒体处理工具。首先,从官方网站下载FFmpeg的最新版本,然后通过Xftp工具将下载的压缩包(如ffmpeg-4.3.1.tar.xz)传输到服务器上。接下来,解压文件并按照官方文档进行编译安装。安装完成后,可以通过命令行工具验证FFmpeg是否成功安装,并开始进行多媒体文件的转换和处理。此外,文章还将介绍一些常用的FFmpeg命令和参数,帮助用户快速上手。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • 利用Apache构建高效稳定的Web服务器环境
    本文详细介绍了如何利用Apache构建高效稳定的Web服务器环境。首先,概述了Apache服务器的基本概念及其安装步骤,并深入探讨了相关配置文件的设置方法。接着,通过具体的实验环境示例,展示了服务端(域名:zhangpp63.cn,IP地址:192.168.1.63)和客户端的配置过程,确保读者能够全面理解并实际应用这些技术。此外,还提供了一些优化建议,以提高服务器的性能和稳定性。 ... [详细]
  • Git基础操作指南:掌握必备技能
    掌握 Git 基础操作是每个开发者必备的技能。本文详细介绍了 Git 的基本命令和使用方法,包括初始化仓库、配置用户信息、添加文件、提交更改以及查看版本历史等关键步骤。通过这些操作,读者可以快速上手并高效管理代码版本。例如,使用 `git config --global user.name` 和 `git config --global user.email` 来设置全局用户名和邮箱,确保每次提交时都能正确标识提交者信息。 ... [详细]
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社区 版权所有