Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将clojure应用程序与Ruby on Rails应用程序相结合_Ruby On Rails_Ruby_Clojure_Jruby_Jrubyonrails - Fatal编程技术网

Ruby on rails 将clojure应用程序与Ruby on Rails应用程序相结合

Ruby on rails 将clojure应用程序与Ruby on Rails应用程序相结合,ruby-on-rails,ruby,clojure,jruby,jrubyonrails,Ruby On Rails,Ruby,Clojure,Jruby,Jrubyonrails,我有一个Clojure后端,我想在其前端安装一个Rails。我应该如何连接它们,具体如何连接 在我看来,有两种方法: 在rails上运行Jruby,过程与clojure应用程序相同 运行普通的RubyonRails,并通过消息队列、web挂钩和联合数据库将其连接到clojure后端 两者似乎都有缺点。在前一种情况下,运行jruby似乎会限制我们可以重用的gem,并且在库作者没有使某些东西完全兼容时会降低我们的生产率。在后一种情况下,我认为我们将错过代码重用——在某些情况下可能需要两次实现相同

我有一个Clojure后端,我想在其前端安装一个Rails。我应该如何连接它们,具体如何连接

在我看来,有两种方法:

  • 在rails上运行Jruby,过程与clojure应用程序相同
  • 运行普通的RubyonRails,并通过消息队列、web挂钩和联合数据库将其连接到clojure后端
两者似乎都有缺点。在前一种情况下,运行jruby似乎会限制我们可以重用的gem,并且在库作者没有使某些东西完全兼容时会降低我们的生产率。在后一种情况下,我认为我们将错过代码重用——在某些情况下可能需要两次实现相同的东西——而更复杂的接口(例如web钩子而不仅仅是函数调用)将使我们付出代价


最后,在JRuby的例子中,还不清楚如何将两者连接起来。它们都附带了管理脚本:rake和leiningen,以及特定的存储库布局。我真的不知道如何开始把他们联系在一起。建议和战争故事受欢迎。

我认为如果是我,我肯定会使用消息队列在这些服务之间进行通信,尽管JRuby在前端也是一个不错的选择(我认为大多数GEM在这一点上相当兼容,即使是那些带有本机扩展的)。最终,您可以使用这两种方法的元素

您所说的是一个相当典型的SOA设置,这是SOA的一大优点,您可以在不同的语言和平台上发挥最大的作用。试图在jruby on rails设置中使用clojure可能会带来很多痛苦和痛苦,而IIRC首先会损害使用clojure的一些好处


不幸的是,我没有任何与你想做的完全相符的战争故事,但是我现在正处于这样一个架构中,而且它的工作非常棒,用RabbMQ让MRI 1.9与后端的JRuBee工作人员交谈。我不确定你会如何在clojure中使用消息,但我想它的某个地方一定有文档,你将能够保持干净的分离。如果您在jruby上运行前端,您仍然可以在jruby进程和clojure后端之间共享代码,而不必将它们放在同一个进程中。

免责声明:我没有使用Ruby完成这项工作,但在同一个应用程序中混合clojure和Java模块方面有相当多的经验,而且效果非常好

如果你能做到这一点,我强烈建议你选择JRuby路线,原因如下:

  • 更少的部署依赖性—您只需要JVM和相关的JAR/WAR
  • 通过使用进程内通信,您将比使用队列等获得更好的性能
  • 在架构上,它将更简单,更易于维护
  • 您可以从JRuby访问所有Java库生态系统-根据您的具体需求,这可以轻松弥补您因兼容性问题而丢失的宝贵资源
  • 您将能够使用两个环境中相同的类和公共库

至于项目布局,我希望最简单的方法是创建两个不同的项目,一个打包为jar,另一个打包为库。

我还没有使用Clojure+JRuby做过任何事情,但我已经尝试过JRuby+Scala/Java

Scala/Java端充当服务层,JRubyonRails位于其上。这两个项目是分开管理的:Scala/Java项目通过Maven编译到一个JAR中,然后作为依赖项添加到Rails应用程序中

这似乎工作得很好,我想Clojure会工作得更好,因为Clojure集合实现了JRuby使用的接口,在Scala中,我不得不调整服务层接口