【问题标题】:How do Rails and Jruby relate?Rails 和 Jruby 有什么关系?
【发布时间】:2010-07-30 10:20:01
【问题描述】:

背景:我有一个可供许多开发人员访问的 java 库 - 通常通过 java。但是,一些开发人员希望通过 Ruby API 访问它。为了实现 Java-Ruby API,我倾向于使用 Jruby。

问题:

  1. 我主要担心这些开发人员将无法在他们当前的 Ruby on Rails 开发框架中使用 API;而是必须在 Jruby 的 rails 环境中运行。会这样吗?

  2. 也许我错过了 Jruby 和 Ruby on Rails 之间的联系。但是看起来你既可以在 Rails 中工作,也可以在 Jruby 的 rails 中工作——这在技术上是两种不同的开发环境吗?

我真的很感激有人能对此有所了解..

编辑:强迫开发人员(实际上是客户更具体)对他们的项目进行重大更改以适应此 API 并不是一个真正的选择。那么,如果他们的 Rails 应用程序必须转换为 Jruby on Rails 应用程序,那么也许有人可以为我提供另一种替代方案(Jruby 除外)?

【问题讨论】:

    标签: ruby-on-rails api jruby jrubyonrails


    【解决方案1】:

    首先我要提一下,Ruby on Rails 只是简单的 Ruby 代码,同样的代码可以在 JRuby 环境(在 JVM 上)或 MRI(用 C 编写)运行时中运行。

    但是,只有 JRuby 可以加载 Java 类并使用 Java API。要求您的客户将他们的部署环境切换到 JRuby 可能不可行,但如果您可以在 Java 中设置一个支持 XML 或 JSON 的服务,那么他们将能够轻松地从 Rails 中使用它。

    【讨论】:

    • 如果你能给我一个开始走这条路的地方,我真的很感激。
    【解决方案2】:

    您可能会发现similar question 的答案很有帮助。根据您的应用程序,可能可以无缝移植您的 RoR 应用程序以在 JRuby 上运行,但须遵守该答案中指出的警告。但您需要确保这样做的好处平衡了努力和潜在风险。

    或者,您可以考虑将这些 Java 库设施作为基于 JRuby 构建的内部 Web 服务(可以是 Rails 或 Sinatra 或类似服务)提供给您的 MRI Rails 应用程序。这样你就可以解耦元素并降低项目的风险。如果您随后对这种工作感到满意,那么您可能会考虑将它们重新组合在一起,如果有意义的话,所有这些都在 JRuby-on-Rails 下。

    更新:应提问者的要求添加更多细节

    由于我不熟悉您的应用程序或 Java 库的功能,所以这会有些抽象,但我相信您可以根据自己的需要填补空白。

    似乎完全移植 Rails 应用程序以在 Jruby 上运行是不可行的。美好的。因此,一种想法是将您的 Java 库作为 Web 服务(例如 RESTful)公开给您的 RoR 应用程序。让我们称这个东西为 JLS。在这种情况下,它将作为 Java 或 Jruby 网络服务运行,监听请求,调用库并发送回响应(这里一般挥手,但你明白了)。

    根据您的开发人员更熟悉的内容,您可以在运行 Servlet 容器的 Java 中创建 JLS。或者您可以使用 Ruby 开发 JLS,在 Jruby 上运行(绑定到您的 Java 库)并使用 Rails 或 Sinatra 等框架来实现它。

    在 RoR 方面,假设您已将 JLS 设为 RESTful(我不知道这是否适合您的情况),您可以使用 ActiveResource 工具与 JLS 进行通信。

    总而言之,RoR 应用程序和 JLS 在不同的内存空间(甚至可能是不同的主机)中运行。每个都可以在一定程度上独立开发(当然,使用 RESTful 接口协议),并且您的 RoR 应用程序不需要被中断或置于危险之中。

    这个建议的选项带有大量的小字,但我希望你能大致了解。

    【讨论】:

    • 感谢您的回答。你能稍微扩展一下你的第二段吗?对于我的情况,该选项似乎更可行..
    猜你喜欢
    • 1970-01-01
    • 2010-12-16
    • 2010-09-14
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2016-09-28
    相关资源
    最近更新 更多