0

我正在尝试使用 DirectJRubyEmbedding 为我的应用程序设置 Java 到 Ruby API 调用。需要加载的 ruby​​ 模块之一是 active_support。然后它加载“securerandom”,然后加载“openssl”

在 openssl 中,digest.rb 对此有一个重述。

尝试使用 OpenSSL gem 会导致以下错误:

未初始化的常量 OpenSSL::Digest::OPENSSL_VERSION_NUMBER

在 org.jruby.RubyModule.const_missing(org/jruby/RubyModule.java:2677) 在 RUBY.Digest(/Users/v/.rvm/gems/ruby-1.9.3-p125/gems/jruby-openssl-0.8. 2/lib/1.9/openssl/digest.rb:24) 在 RUBY.OpenSSL(/Users/v/.rvm/gems/ruby-1.9.3-p125/gems/jruby-openssl-0.8.2/lib/1.9 /openssl/digest.rb:22) 在 RUBY.(root)(/Users/v/.rvm/gems/ruby-1.9.3-p125/gems/jruby-openssl-0.8.2/lib/1.9/openssl/ digest.rb:21) 在 org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027) 在 RUBY.(root)(/Users/v/.rvm/gems/ruby-1.9.3-p125/ gems/jruby-openssl-0.8.2/lib/1.9/openssl.rb:1) 在 org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027) 在 RUBY.(root)(/Users/v /.rvm/gems/ruby-1.9.3-p125/gems/jruby-openssl-0.8.2/lib/1.9/openssl.rb:20) 在 org.jruby.RubyKernel.require(org/jruby/RubyKernel.java :1027) 在 RUBY.(root)(/Users/v/.rvm/rubies/jruby-1.6.7.2/lib/ruby/1.9/securerandom.rb:1) 在 org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027) 在 RUBY.(root)(/Users/v/.rvm/rubies/jruby-1.6.7.2/lib/ruby/1.9/ securerandom.rb:37) 在 org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027) 在 RUBY.(root)(/Users/v/.rvm/gems/ruby-1.9.3-p125/ gems/activesupport-3.2.9/lib/active_support.rb:1) 在 org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027) 在 RUBY.(root)(/Users/v/.rvm/ gems/ruby-1.9.3-p125/gems/activesupport-3.2.9/lib/active_support.rb:24) 在 org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027) 在 RUBY.(root )(/Users/v/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.9/lib/active_support/all.rb:1)(root)(/Users/v/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.9/lib/active_support.rb:1) at org.jruby.RubyKernel.require(org/jruby /RubyKernel.java:1027) 在 RUBY.(root)(/Users/v/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.9/lib/active_support.rb:24) 在 org .jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027) 在 RUBY.(root)(/Users/v/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.9/ lib/active_support/all.rb:1)(root)(/Users/v/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.9/lib/active_support.rb:1) at org.jruby.RubyKernel.require(org/jruby /RubyKernel.java:1027) 在 RUBY.(root)(/Users/v/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.9/lib/active_support.rb:24) 在 org .jruby.RubyKernel.require(org/jruby/RubyKernel.java:1027) 在 RUBY.(root)(/Users/v/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.9/ lib/active_support/all.rb:1)

我正在使用 Ruby 1.9.3-p125 和 openssl 0.8.2,如下面的 gem 加载所示。

.rvm/gems/ruby-1.9.3-p125/gems/jruby-openssl-0.8.2/lib/1.9

我注意到 jirb 显示:

1.9.3-p125:004 > OpenSSL::OPENSSL_VERSION_NUMBER => 9469999

因此,看起来 JRuby.jar 中的 java 编译类在 OpenSSL 模块中定义了它,但 .rb 文件中的代码无法找到它。

任何帮助将非常感激。

谢谢

4

1 回答 1

0

正如我在https://github.com/jruby/jruby/issues/493中提到的,您应该考虑使用 RedBridge 而不是DirectJRubyEmbedding.

于 2013-01-14T20:55:52.163 回答