2010-09-14 64 views
2

我刚刚在MRI中使用JRuby和Thrift宝石后才安装它。我遇到了一个问题,如果我需要“节俭”,我会收到消息“无法加载thrift_native扩展,默认为纯Ruby库。”如果我然后尝试并要求在ruby中生成的代码节俭,我会得到这个错误:“NameError:未初始化常量Thrift :: Struct_Union”节俭宝石和JRuby

是节俭宝石目前不与JRuby工作?

除了使用gem之外,我还可以使用JRuby进行节俭吗?

编辑:在挖掘我的MAC后,我发现MRI宝石和JRuby宝石是不同的,即使宝石是相同的版本(0.2.0.4)。现在这似乎是一个可怕的想法,但是如果您将MRI宝石中的.rb文件复制到JRuby宝石中,并将require 'thrift/struct_union'添加到thrift.rb中,您将不会再收到任何与Thrift宝石相关的错误,除非它找不到thirft_native并将使用纯Ruby库。这可以解释,因为thrift_native是C而不是Java。

回答

1

当您已经在使用JRuby时,我会使用Java本地节俭客户端。对我来说,节俭是首先转向JRuby的原因,因为Ruby的实现相当缓慢和错误。

+0

你是不是说要使用gem并为Java构建节俭?你还能从Ruby中访问它吗? – Aaron 2010-09-19 20:42:16

+0

这取决于你使用节点的位置,但是如果你连接的应用程序有一个很好的Java客户端,那么当它归结为节俭时,我肯定会使用Java客户端来支持Ruby。 JRuby的优点在于使用原生Java代码非常简单。例如,我使用Hector连接到Cassandra,但是从Ruby应用程序调用它。 – xinit 2010-09-20 06:33:41

+0

这大致仍然是真的吗?那就是:远离Ruby节俭的宝石(如果您使用JRuby并运行像Puma或Phusion Passenger这样的真正的多线程服务器)并使用Java本地节俭客户端来代替?感谢任何评论,@ xinit或Aaron或其他人。 – likethesky 2013-10-29 21:28:48