Rails和Jruby如何联系?

时间:2010-07-28 21:28:04

标签: ruby-on-rails api jruby jrubyonrails

后台:我有一个很多开发人员访问的java库 - 通常是通过java。但是,一些开发人员希望通过Ruby API访问它。我倾向于Jruby的方向,以实现Java-Ruby API。

问题:

  1. 我主要担心的是这些开发人员无法在他们当前的Ruby on Rails开发框架中使用API​​;但是必须在Jruby的铁轨环境中运作。情况会是这样吗?

  2. 也许我错过了Jruby和Ruby on Rails之间的联系。但似乎你可以在Rails中工作,或者在Jruby的轨道上工作 - 这些技术上是两种不同的开发环境吗?

  3. 我真的很感激有人可以解决这个问题。

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

2 个答案:

答案 0 :(得分:1)

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

或者,您可以考虑将这些Java库工具作为内部Web服务(可以是Rails或Sinatra或类似工具)在JRuby上构建。这样你就可以将元素分离并降低项目的风险。如果您随后对此工作感到满意,那么您可以考虑将它们重新组合在一起,所有这些都在JRuby-on-Rails下进行,如果这有意义的话。

更新:在提问者请求中添加更多详细信息

由于我不熟悉您的应用程序或Java库所做的事情,这将有点抽象,但我相信您可以填写空白以满足您的需求。

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

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

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

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

这个建议的选项带有大量的小字体,但我希望你能得到一般的想法。

答案 1 :(得分:1)

首先,我应该提到Ruby on Rails只是Ruby代码,相同的代码可以在JRuby环境(在JVM上)或MRI(用C语言编写)运行时运行。

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