`
hhhj
  • 浏览: 9262 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

JRuby on Rails 迁移经验总结

阅读更多

最近由于一些原因,想把手上的一个项目从cruby迁移的jruby上来,其间遇到了一些问题和疑惑,写下来与各位分享和探讨。

1. 项目概况

   原配置: rails 2.2.2,ruby 1.8.7,oracle 9.2.0.6,部署用nginx+mongrel_cluster

   现配置: rails 2.2.2, jruby 1.1.6,jdk 1.6.0_10,oralce 9.2.0.6, 服务器用glassfish v3 (glassfish gem 0.9.2)

 

2.移植过程中的问题 

   a. 数据库(字段类型问题)

       原来的数据库连接用ruby-oci8 + activerecord-oracle-adapter。因为JRuby不支持c扩展,所以只能改为activerecord-jdbc-adapter + ojdbc14.jar。其实jdbc的更加方便,不需要再安装oracle客户端了。但在实际迁移中却遇到了另一个问题:find_by_sql在cruby中返回的数据集,字段类型可以根据数据库字段类型自 动转换,而不管查询的字段是不是在model中。但在jruby中,此方法返回的数据,如果字段名不在model中,则统一返回字符型。这个差异使代码运行时产生了很多异常。只能手工更改,花费了许多时间。

   b. libxml-ruby 与 libxml-jruby

       在原项目中需要大量解析xml文件,基于性能的考虑,使用了libxml-ruby库。但此库在jruby中无法使用。在移植开始前,我最烦恼的就是这个问题。如果换用其他库,将会带来很大的代码修改量,且性能上会有所降低。在网上搜索了一下,发现在http://rubyforge.org/projects/libxml-jruby/有一个libxml-jruby的项目,可   里面没有任何代码下载。后来在http://github.com/mguterl/libxml-jruby/tree/master中终于找到了。把代码git clone下来,运行rake gem:install,生成gem   文件。 然后安装。(在parse.rb中的一个bug,定义类的时候没有定义module,导致代码异常,只要加上module定义就行了)。经过测试,这个包的接口与libxml-ruby完全兼容。一行代码都不需要改。而且在速度上也基本相当。真是一个惊喜。

   c.性能问题

       在这方面JRuby就完全辜负我的期望了,平均速度比ruby 1.8.7 慢了1.5-2倍不等。在生产环境下也要慢1.2-1.5倍。当然这是在window上的测试结果,在linux主机上是不是会有所改善,还没有详细测试。

  d.多线程 

      rails2.2 以后支持多线程了,而jruby的本地线程更是一大优势。所以我自然要测试一下多线程的工作模式了。可在开启多线程后,服务器启动就出错了。经查阅资资料得知,多线程模式中lib目录下的文件不会被自动load,必须要手工require。不过这也没什么,不就是改2行代码吗。但致命的问题是很多插件没法工作了,比如说activescaffold就完全熄火了。看来rails多线程支持还有很长的路要走。

 

3.总结

   没有遇到无法解决的问题。代码也只要稍做修改。性能问题是影响移植的主要障碍。多线程模式还不成熟。

 

4.疑问 

   a. 在原来的部署中rails通过mongrel_cluster开启多个进程来响应请求。那在glassfish的方式中,只有一个进程,那请求繁忙时,会不会自动增加rails进程。而且没有开启多线程的情况下,如何同时响应多个请求?

    经查阅glassfish文档,已经得到了答案。glassfish会根据配置启动多个rails实例来响应请求。

   b.glassfish gem 和 glassfish 服务器在性能上差别有多大?

   c.如何优化JRuby on rails的性能?

 

   以上疑问,还请高手解惑。

分享到:
评论
3 楼 night_stalker 2009-02-16  
2 楼 hhhj 2009-02-15  
night_stalker 写道
似乎重载find_by_sql函数比大量手工修改好点...

jruby比cruby慢?是不是没编译?

4.搭车同疑问


重载find_by_sql我也想过,但由于并不能事先知道每个查询结果中每列的类型,所以没法写通用的函数

jruby on rails 怎么编译?我不知道啊

1 楼 night_stalker 2009-02-14  
似乎重载find_by_sql函数比大量手工修改好点...

jruby比cruby慢?是不是没编译?

4.搭车同疑问

相关推荐

    jRuby On Rails WEB2.0

    作为JRuby项目的领头人和核心开发者,Ola Bini以其丰富的经验和深刻的洞察力,为读者提供了一套实用的方法论和项目案例,旨在帮助Java开发者掌握jRuby技术,从而在企业级Java应用中无缝集成Ruby on Rails。...

    Apress - Practical JRuby on Rails Web 2.0 Projects (Sep 2007)

    《JRuby on Rails Web 2.0 实用项目》 英文PDF + 源码

    JRuby on Rails Web 2.0 Projects

    ### JRuby on Rails Web 2.0 Projects:将Ruby on Rails引入Java平台 #### JRuby简介 JRuby是一种Ruby语言的实现,它运行在Java平台上,利用了Java虚拟机(JVM)的强大功能。JRuby使得开发人员能够在Java环境中使用...

    Code Review&JRuby on Rails

    6. **迁移策略**:对于已有Java项目的团队,可能会讲述如何平滑地将部分功能迁移到JRuby on Rails。 通过学习这些内容,读者不仅可以了解如何有效地进行代码审查,还能掌握如何利用JRuby将Ruby on Rails的魅力引入...

    Netbeans 6.0 JRuby on Rails 演示

    Netbeans 6.0 JRuby on Rails demo

    Netbeans 6.0 JRuby on Rails 演示 .swf

    Netbeans 6.0 JRuby on Rails 演示 .swf

    jruby_on_rails

    【JRuby on Rails:简介】 JRuby on Rails 是一个基于 JRuby 实现的 Ruby on Rails 框架的版本,允许开发者在 Java 平台上利用 Rails 的强大功能进行 web 应用开发。Ruby on Rails(简称 Rails)是由 David ...

    JRuby和Rails-让Ruby语言融入于Java项目.rar

    《JRuby和Rails-让Ruby语言融入于Java项目》是一本深入探讨如何在Java环境中使用JRuby和Rails框架的教程。这本书旨在帮助开发者理解和实践如何将Ruby on Rails的灵活性和生产力引入到Java企业级开发中,从而提升软件...

    2009 KungFu Rails大会JRuby演讲PPT

    KungFu Rails大会是一个专注于Ruby on Rails技术的活动,而JRuby则是Ruby的一个重要实现,它允许开发者在Java平台上运行Ruby代码,从而利用Java的生态系统。 首先,JRuby是一个开源的、符合Ruby语言规范的实现,由...

    heroku-jruby-rails-4

    **Rails 4** 是 Ruby on Rails 框架的一个版本,这是一个流行的、用于构建 Web 应用的 MVC(模型-视图-控制器)框架。Rails 4 引入了许多新特性和改进,如 Action Cable(支持实时通信)、Strong Parameters(强化...

    结合使用 Oracle 和 Ruby on Rails 教程

    【标题】:“结合使用 Oracle 和 Ruby on Rails 教程” 在 IT 领域,数据库管理和Web开发是两个至关重要的方面。Oracle 是一款强大的关系型数据库管理系统,而 Ruby on Rails(简称 Rails)则是一个流行的开源Web...

    jruby-lab:JRuby的实验室是jruby内容的存储库。 带有示例和参考

    JRuby的主要传播网站- Wiki和文章一点JRuby历史 JRuby Wiki以及开始使用JRuby进行学习的方式 JRuby on Rails的Wiki部分 有关在JRuby中进行编程需要什么的文章 该参考资料显示了从Ruby类到Java类的转换 JSR-292和...

    theine:用于JRuby的Rails预加载器(类似于Zeus,Spring和Spork)

    咖啡碱 当前由rwilliams维护 Theine是设计用于JRuby的Rails应用程序预加载器。 它类似于Zeus,Spring和Spork。 Zeus和Spring的问题在于它们使用了在JRuby上不起作用的`fork'。 time rails runner "puts Rails.env"48...

Global site tag (gtag.js) - Google Analytics