gpt4 book ai didi

ruby - 使用 RJB 从 Ruby 调用 Scala 代码

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:08 27 4
gpt4 key购买 nike

我即将开始重写我们的 Rails 应用程序的零碎部分,这些应用程序在 Scala 中执行相对较重的数字运算以提高速度。最终的计划是让一个在后台运行的 scala 守护进程完成所有处理,并只使用 Rails 作为前端,但与此同时,我希望现在能够重写一些较慢的代码,并从中同步调用它们 ruby 。

出于这个原因,我一直在寻找 RJB (我不能使用 JRuby)希望我也可以将它与 scala 一起使用,因为它最终会编译为 Java 字节码。我在谷歌周围搜索了一下,看看是否可以找到已经做过此或类似但没有想出任何东西的人。

我最初天真的尝试只是编译一个测试 scala 类并将其打包到一个 jar 中,然后尝试使用 Rjb 加载它,如下所示:

Rjb::load("#{Rails.root}/lib/scala/scala-tester-1.0-SNAPSHOT.jar")
MyClass = Rjb::import('com.mydomain.MyClass')

但这只会导致 java.lang.NoClassDefFoundError: com/mydomain/MyClass

我测试了导入标准 java 类,效果很好,所以我测试了导入 scala.Int,这导致了另一个 NoClassDefFoundError。这种向我暗示问题可能在于没有包含在类路径中的 Scala 库?但是自从我不得不处理令人头疼的 Java 类路径以来已经有很长一段时间了,所以我在诊断和修复这类问题时非常生疏。

那么,有人这样做过吗?如果不是,我的直觉听起来正确吗?有什么建议么?还是有什么我没有想到的,这意味着这种方法根本行不通?

编辑:意识到我一直在使用稍微不正确的语法。现在已经设法使用如下语法让它加载我的测试 jar:

Rjb::load(classpath = "#{Rails.root}/lib/scala/scala-tester-1.0-SNAPSHOT.jar", jvmargs=[]) 

但失败并出现不同的 java.lang.NoClassDefFoundError: scala/ScalaObject 这表明它肯定无法加载 scala 库。

最佳答案

我让它与以下项目一起工作:

RJB_LOAD_PATH = ["#{ENV['SCALA_HOME']}/lib/scala-library.jar", "#{Rails.root}/lib/scala/scala-tester-1.0-SNAPSHOT.jar"].join(File::PATH_SEPARATOR)
RJB_OPTIONS = []

Rjb::load(RJB_LOAD_PATH, RJB_OPTIONS)

打算将此代码放入初始化程序中,但它看起来仍然有点老套,如果有人有任何更简洁的建议,我们会很高兴。

关于ruby - 使用 RJB 从 Ruby 调用 Scala 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9481051/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com