【问题标题】:jRuby on Rails vs Grails [closed]jRuby on Rails 与 Grails [关闭]
【发布时间】:2012-09-02 13:11:36
【问题描述】:

我希望开发一个全新的 Web 应用程序,它可以重用大量 Java 组件。对我来说,显而易见的选择是 Grails 或 jRuby on Rails,但我很难找到两者的客观比较。是否有任何明确的理由在以下方面选择一个而不是另一个:

  1. 易于与现有 Java 组件(在持久域之外)集成,例如JMS、EIP
  2. 支持功能测试框架
  3. 单机性能
  4. 可扩展性

不是在寻找与开发者可用性或社区活动相关的答案。


(我查过Grails vs. Rails,与我无关)

【问题讨论】:

  • 除了上面的答案,grails 还有一个plugin for JMS
  • 我认为答案可能在于检查每个 Gems 或 Plugins 有哪些可以帮助集成。

标签: ruby-on-rails grails jruby jrubyonrails


【解决方案1】:

两者都尝试,然后选择最适合您的语言和环境。确实,开箱即用的 Grails 堆栈更适合 Java 集成,但许多组件距离与 Rails 的集成只需几行 Ruby 代码。 Rails 3 是一个很棒的版本,它不需要您使用 ActiveRecord,事实上,将 Hibernate 用于您的模型将是微不足道的。另请参阅 DataMapper、MongoMapper 和大量适用于 SQL 和 NoSQL 数据库的数据库适配器。

此外,JUnit != 功能测试。相反,请查看 Cucumber + Cucumber-Rails + Capybara + Selenium 以获得集成的浏览器自动化测试体验。请查看 https://github.com/elabs/front_end_testing 以获取演示此堆栈的示例应用程序。

我建议 Ruby 更适合作为一种 Web 集成语言,而 JRuby 达到了与 Java 的集成既简单又令人愉悦的最佳位置,同时为您提供了大量的非 Java 库。不要认为 Groovy 自动获胜,因为它“更接近”Java。有时您需要进入一个令人耳目一新的不同环境,才能重新审视如何解决问题。

披露:作为 JRuby 团队的成员,我的回答很明显有偏见。

【讨论】:

  • 哇,15 票赞成(到现在为止)?!为了什么? - 提问者指定了四个标准,可以使答案成为解决方案。 - 但是,您只响应其中之一(功能测试)。 - 集成 JMS 等 Java 企业技术怎么样(这是问题中的要求)?很可能,从 JRuby 到那些距离很远。
  • 感谢(可以理解的偏见;)响应。正如@robbbert 所说,这并没有解决所有提到的问题。另外,我知道 JUnit 不太适合功能测试。也许这应该是@ammoQ 的回答?
  • @robbert +1。可扩展性和性能如何? jtict.com/blog/rails-wicket-grails-play-lift-jsp Grails 不仅在语法上更接近 Java,而且在集成方面也很容易。它基于 Spring 的架构非常棒,而且非常易于使用。
【解决方案2】:

我非常了解 Grails(现在我正在做一个 Grails 项目),但不了解 JRuby,因此可能有偏见:查看 JRuby 文档,看起来 JRubys 与 Java 的集成有点更麻烦,因为 Java 在 Groovy 中比在 Ruby 中更原生;因此,在 JRuby 中,您有很多特定于 java 的关键字和方法(例如 java_importjava_send)。简单地说,Groovy 是一种专门针对 Java 世界的语言,而 JRuby 是 Ruby 放在 JVM 上的。

Grails 内置了 JUnit 测试。

不能说太多关于性能和可扩展性,但考虑到与 Java 的良好集成,当 Groovy 太慢时,总是可以用 Java 编写性能关键部分。

【讨论】:

  • 谢谢,你已经解决了第一点。您对这种集成有很多经验吗?代码 sn-ps 的比较可能很有用。至于 JUnit,我认为它更适合单元测试而不是功能测试。如果我错了,请纠正我。如果我理解正确,无论是使用 Groovy 还是 JRuby,出于性能原因用 Java 重写代码都是一种选择。再次;如果我错了,请纠正我。
  • Alison:Groovy 与 Java 无缝集成,Groovy 方法调用 Java 对象方法的代码片段看起来就像 Groovy 调用 Groovy 或 Java 调用 Java。关于功能测试:你是对的,但这个链接可以帮助你:grails.org/Functional+Testing
  • 用 Java 重写是 JRuby 中的一个选项,当然,但是 Groovy 的语法(它相对接近 Java)和无缝集成可能会使它在 Grails 中更容易一些
【解决方案3】:
  • 易于与现有 Java 组件集成:

使用 groovy 更容易,因为 groovy 基本上是 java。你没有大的上下文切换

  • 支持功能测试框架

ruby 有自己的一堆测试框架,例如 rspec/shoulda/cucumber/steak 等等。因为我喜欢 ruby​​ 语法,所以我更喜欢那些

  • 单机性能

据我所知,grails 在多线程方面做得更好,因为过去 Rails 并没有过多关注这一点。他们目前正在追赶,所以可能是平局。

  • 可扩展性

两者都与 jvm 环境一起扩展。如果您有一个正在运行的 Java 基础架构,那么 grails 更容易集成。

【讨论】:

  • 感谢您的回答。 1. 对于 Groovy 的集成比 JRuby 更容易集成有什么感受? 2. 很高兴听到 Ruby 的测试选项;这些都与 JRuby 兼容吗? 3. 我了解 JRuby 的线程模型与标准 Ruby 的显着不同(例如,它实际上使用线程);你有考虑到这一点吗? 4. 扩展 JRuby 可能就像扩展 Rails 应用程序一样简单——只需使用 Java 应用程序服务器而不是 Ruby 应用程序服务器。有什么想法吗?
  • 1.这不是关于 Groovy 与 JRuby 的集成,而是关于 Grails 与 JRuby On Rails 的集成。 Grails 更简单,因为它只是另一个 java 库。 JROR 使用类似 warbler 的工具或像 TorqueBox 这样的自定义堆栈。 2. 视情况而定。 3.和1一样。关于Rails的线程支持。 Rails 3 默认有一个 Request-Lock。 4. 不,见 3。
【解决方案4】:
  1. 正如 phoet 所说,Grails 具有一流的 Spring 支持,因此集成 Spring 库通常非常容易——许多插件就是这样做的,包括 JMS 插件。

    Java 代码可以在 JAR 中提供,也可以放在项目的 src/java 目录中。 Groovy 类可以引用可以引用 Groovy 类的 Java 类。它非常无缝。

  2. Grails 通过各种插件支持 HtmlUnit、Selenium-rc 和 WebDriver。 Geb 目前有很多兴趣,尤其是与 Spock 结合使用时。

  3. 测试它们。我不知道最近是否有任何比较,但性能通常在很大程度上取决于您的应用程序。 http://grails.org/http://beta.grails.org/ 都在一台机器上运行 - 都是 Grails 应用程序。

  4. 我认为通过 Terracotta 集群 Grails 非常容易。如果你愿意,你也可以用普通的 Tomcat 来做。分布式缓存有多种选择 - SpringSource 以 GemFire 的形式提供自己的(商业)产品。

希望对您有所帮助,为了全面披露,我是 Grails 团队的一员。

【讨论】:

    【解决方案5】:

    最后,您将根据个人选择、两种语言的舒适度和资源可用性做出决定,但最后,Grails 基于 Spring 的事实让我得出结论,它是对我来说是正确的选择。我知道,如果一切都失败了,我可以退回到使用经过验证的真正 Spring 框架

    【讨论】:

    • 谢谢。我有点希望可以做出客观的决定,但你可能是对的。
    【解决方案6】:

    对于 2012 年对此问题感兴趣的新人...

    “使用@CompileStatic,Groovy 的性能大约比 Java 慢 1-2 倍,而没有 Groovy,它大约慢 3-5 倍。(...)这对我来说意味着 Groovy 已经为应用程序做好了准备性能必须在某种程度上与 Java 相当。”

    性能测试:Groovy 2.0 与 Java http://java.dzone.com/articles/groovy-20-performance-compared

    除了作者之外,我从 2008 年开始就使用 Groovy 并取得了巨大的成功,不仅是为了 CV,只是为了及时完成业务需要。性能永远与您想做的事情相关。

    关于集成,Grails 真的“那么好”。我从来不需要进一步将它与现有库集成。相反,Grails 基于 Spring 的特性使这项工作变得更加容易。

    对于那些可能会抱怨微基准和实际用例的人,这里有一个有点旧的(Grails 1.8)但很好的 Web 框架(Grails 1.3.7):http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/

    希望这会有所帮助!

    PS.:我想看看 JRuby 和其他真正动态的 JVM 语言最近的基准测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多