【问题标题】:JRuby eval() OpenSSL::SSL::SSLError: creating X509 Aux certificate: java.io.IOExceptionJRuby eval() OpenSSL::SSL::SSLError:创建 X509 辅助证书:java.io.IOException
【发布时间】:2016-03-17 18:14:11
【问题描述】:

我的 Spring Boot JRuby 应用程序出现间歇性问题 - 此代码在外部 ruby​​ 文件上执行脚本引擎 eval()

    //get jruby engine
    ScriptEngine jruby = new ScriptEngineManager().getEngineByName("jruby");

    //process a ruby file
    jruby.eval(new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/ruby/myscript.rb"))));

    //call a method defined in the ruby source
    jruby.put("score", score);
    jruby.put("message_id", messageId);
    jruby.put("sourcedid", sourcedId);
    jruby.put("key", key);
    jruby.put("secret", secret);
    jruby.put("lis_outcome_service_url", lisOutcomeServiceUrl);

    String res =  (String) jruby.eval("postScore($score, $message_id, $sourcedid, $key, $secret, $lis_outcome_service_url)");

它在大多数情况下返回成功结果,但偶尔我会收到 file not found io 错误,尤其是在快速连续多次调用代码时

OpenSSL::SSL::SSLError: problem creating X509 Aux certificate: java.io.IOException
       setup at org/jruby/ext/openssl/SSLContext.java:229
  initialize at org/jruby/ext/openssl/SSLSocket.java:145
     connect at jar:file:/myproject/lib/jruby-complete-1.7.2.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:776
    do_start at jar:file:/myproject/lib/jruby-complete-1.7.2.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:755
       start at jar:file:/myproject/lib/jruby-complete-1.7.2.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:744
     request at jar:file:/myproject/lib/jruby-complete-1.7.2.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:1292
     request at jar:file:/myproject/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/consumer.rb:161
     request at jar:file:/myproject/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/consumer_token.rb:25
     request at jar:file:/myproject/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/access_token.rb:12
        post at jar:file:/myproject/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/access_token.rb:47
   postScore at <script>:38
      (root) at <script>:1
17:45:33.600 [http-nio-8080-exec-9] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is javax.script.ScriptException: org.jruby.embed.EvalFailedException: (OpenSSL::SSL::SSLError) problem creating X509 Aux certificate: java.io.IOException] with root cause
org.jruby.exceptions.RaiseException: (OpenSSL::SSL::SSLError) problem creating X509 Aux certificate: java.io.IOException
    at org.jruby.ext.openssl.SSLContext.setup(org/jruby/ext/openssl/SSLContext.java:229) ~[na:na]
    at org.jruby.ext.openssl.SSLSocket.initialize(org/jruby/ext/openssl/SSLSocket.java:145) ~[na:na]
    at RUBY.connect(jar:file:/myproject/lib/jruby-complete-1.7.2.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:776) ~[na:na]
    at RUBY.do_start(jar:file:/myproject/lib/jruby-complete-1.7.2.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:755) ~[na:na]
    at RUBY.start(jar:file:/myproject/lib/jruby-complete-1.7.2.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:744) ~[na:na]
    at RUBY.request(jar:file:/myproject/lib/jruby-complete-1.7.2.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:1292) ~[na:na]
    at RUBY.request(jar:file:/myproject/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/consumer.rb:161) ~[na:na]
    at RUBY.request(jar:file:/myproject/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/consumer_token.rb:25) ~[na:na]
    at RUBY.request(jar:file:/myproject/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/access_token.rb:12) ~[na:na]
    at RUBY.post(jar:file:/myproject/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/access_token.rb:47) ~[na:na]
    at RUBY.postScore(<script>:38) ~[na:na]
    at RUBY.(root)(<script>:1) ~[na:na]

想知道是否有人处理过这样的事情?感谢您提供任何优化建议。

编辑:@kares 感谢您的回复-我已尝试升级 jruby,但仍然遇到相同的错误。你有什么建议吗?现在我认为 ruby​​ 文件存在竞争条件......

Errno::EBADF: Bad file descriptor - Bad file descriptor
       fcntl at org/jruby/RubyIO.java:2295y 
       fcntl at org/jruby/ext/openssl/SSL.java:248
  initialize at org/jruby/ext/openssl/SSL.java:286
  initialize at org/jruby/ext/openssl/SSLSocket.java:172
     connect at /lms-integration/lib/jruby-complete-1.7.24.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:777
    do_start at /lms-integration/lib/jruby-complete-1.7.24.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:756
       start at /lms-integration/lib/jruby-complete-1.7.24.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:745
     request at /lms-integration/lib/jruby-complete-1.7.24.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:1293
     request at /lms-integration/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/consumer.rb:161
     request at /lms-integration/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/consumer_token.rb:25
     request at /lms-integration/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/access_token.rb:12
        post at /lms-integration/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/access_token.rb:47
   postScore at <script>:38
      (root) at <script>:1
19:13:06.489 [http-nio-8080-exec-7] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is javax.script.ScriptException: org.jruby.embed.EvalFailedException: (Errno::EBADF) Bad file descriptor] with root cause
org.jruby.exceptions.RaiseException: (Errno::EBADF) Bad file descriptor
    at org.jruby.RubyIO.fcntl(org/jruby/RubyIO.java:2295) ~[jruby-complete-1.7.24.jar:na]
    at org.jruby.ext.openssl.SSL$SocketForwarder.fcntl(org/jruby/ext/openssl/SSL.java:248) ~[na:na]
    at org.jruby.ext.openssl.SSL$Nonblock.initialize(org/jruby/ext/openssl/SSL.java:286) ~[na:na]
    at org.jruby.ext.openssl.SSLSocket.initialize(org/jruby/ext/openssl/SSLSocket.java:172) ~[na:na]
    at RUBY.connect(/lms-integration/lib/jruby-complete-1.7.24.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:777) ~[na:na]
    at RUBY.do_start(/lms-integration/lib/jruby-complete-1.7.24.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:756) ~[na:na]
    at RUBY.start(/lms-integration/lib/jruby-complete-1.7.24.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:745) ~[na:na]
    at RUBY.request(/lms-integration/lib/jruby-complete-1.7.24.jar!/META-INF/jruby.home/lib/ruby/1.9/net/http.rb:1293) ~[na:na]
    at RUBY.request(/lms-integration/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/consumer.rb:161) ~[na:na]
    at RUBY.request(/lms-integration/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/consumer_token.rb:25) ~[na:na]
    at RUBY.request(/lms-integration/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/access_token.rb:12) ~[na:na]
    at RUBY.post(/lms-integration/lib/oauth-gems.jar!/gems/oauth-0.5.0/lib/oauth/tokens/access_token.rb:47) ~[na:na]
    at RUBY.postScore(<script>:38) ~[na:na]
    at RUBY.(root)(<script>:1) ~[na:na]

【问题讨论】:

    标签: java openssl jruby


    【解决方案1】:

    正如 JRuby 的 IRC 所建议的,这是一个相当旧的 JRuby 1.7.x 版本(在创建此答案时最新版本是 1.7.24)。一个相当新的 JRuby-OpenSSL 版本不应该有这个问题。

    附言如果您打算在 IRC 上提出与此处相同的问题,请附上链接。

    【讨论】:

      猜你喜欢
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      相关资源
      最近更新 更多