【问题标题】:issue with JRuby + OpenURI + HTTPSJRuby + OpenURI + HTTPS 的问题
【发布时间】:2012-04-21 11:45:38
【问题描述】:

我尝试使用 JRuby、Open URI 和 JRuby-OSSL 编写的非常简单的程序遇到问题。

我使用以下方式安装了 JRuby-OSSL gem:

gem install jruby-openssl

并下载了最新的 jruby-complete jar (1.6.7)。

我有简单的脚本 test.rb:

require 'jruby/openssl/gem_only'
require 'open-uri'
open('https://google.com')

当我这样运行它时:

java -jar jruby-complete-1.6.7.jar test.rb

我明白了:

NameError: uninitialized constant Net::HTTP::OpenSSL
  const_missing at org/jruby/RubyModule.java:2642
       use_ssl= at file:/Users/mislocin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/net/https.rb:124
      open_http at file:/Users/mislocin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/open-uri.rb:231
    buffer_open at file:/Users/mislocin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/open-uri.rb:616
      open_loop at file:/Users/mislocin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/open-uri.rb:164
          catch at org/jruby/RubyKernel.java:1183
      open_loop at file:/Users/mislocin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/open-uri.rb:162
       open_uri at file:/Users/mislocin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/open-uri.rb:132
           open at file:/Users/mislocin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/open-uri.rb:518
           open at file:/Users/mislocin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/open-uri.rb:30
         (root) at test.rb:4

我很确定我遗漏了一些细节,感谢任何帮助。

【问题讨论】:

    标签: jruby


    【解决方案1】:

    尝试要求 openssl 代替:

    require 'openssl'
    require 'open-uri'
    open('https://google.com')
    

    但当然这可能不会解决你的问题。 你 gem install jruby-openssl 在你的 jruby gem 中,但不要使用 jruby 而是直接调用 java - 你不应该依赖它根据你的 ENV 变量解析 gem。

    您还应该期待 SSLError,因为您尚未将其配置为忽略证书验证,这里是如何获取 https:// URI 的示例:https://gist.github.com/1361989

    【讨论】:

    • 不幸的是,这没有帮助,当我尝试使用 require 'openssl' 时,我得到:LoadError: OpenSSL::SSL requires the jruby-openssl gem。我需要从 JVM 中调用此代码,这就是我不使用 jruby 命令的原因。还有其他想法吗?
    • 您正在尝试做的事情是可移植的“不可能”,正如我在回答中已经提到的那样。您将 gem 安装到 FS 到您的 jruby 的 GEM_HOME 中,但使用 java -jar - 这是行不通的(除非它在装有 GEM_HOME 的计算机上安装了相同的 gem)。 jruby-complete-1.6.7.jar 包含一个(默认)rubygems 安装(检查 META-INF/jruby.home),您需要将 gem “内部” jar - 你应该使用 github.com/jruby/warbler 构建一个可执行的 jruby jar,其中包含一些 gem。
    【解决方案2】:

    好的,发现我的错误。

    我错误地将 GEM_HOME 变量配置为指向我的 gem 存储库而不是 GEM_PATH。配置 GEM_PATH 环境变量后,现在一切正常。

    【讨论】:

    • 在我的书中这不是一个好的答案。您可以在不显示实际目录结构的情况下提供有关这些路径的更多详细信息。只是一个想法。但截至目前,它仍然为零。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多