2012-04-21 3 views
0

JRuby, Open URI 및 JRuby-OSSL을 사용하여 작성하려고하는 매우 간단한 프로그램에 문제가 있습니다.JRuby + OpenURI + HTTPS와 관련된 문제

gem install jruby-openssl 

및 다운로드 최신 JRuby를 완성 항아리 (1.6.7) :

나는 JRuby를-OSSL를 사용하여 보석을 설치했다.

나는 간단한 스크립트 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 

나는 확신 I 어떤 세부 사항을 놓치고있어, 어떤 도움을 주셔서 감사합니다.

답변

-1

OK, 내 오류를 발견.

실수로 GEM_PATH 대신 내 gem repo를 가리키는 GEM_HOME 변수를 구성했습니다. 환경 변수 GEM_PATH를 설정 한 후에는 모든 것이 잘 작동합니다.

+0

그건 내 책에서 좋은 대답이 아니야. 실제 디렉토리 구조를 표시하지 않고 이러한 경로에 대한 자세한 정보를 제공 할 수 있습니다. 그냥 생각. 그러나 이것으로 그것은 여전히 ​​0입니다. –

1

대신 OpenSSL을 요구하십시오 :

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

을하지만, 물론보다 이것은 아마도 당신에게 문제가 해결되지 않습니다. gem install jruby-openssl 당신의 jruby 보석 중 하나이지만 jruby을 사용하지 말고 직접 java를 실행하십시오. ENV 변수를 기반으로 보석 해결에 의존해서는 안됩니다. //의 URI : 당신이 인증서 확인을 무시하도록 구성하지 않은으로

당신은 또한 SSLError를 기대한다, 여기 HTTPS를 사용하는 방법을 샘플입니다 https://gist.github.com/1361989

+0

불행히도 그게 도움이되지 않았는데, 내가 'openssl'을 필요로 할 때 : LoadError : OpenSSL :: SSL은 jruby-openssl gem이 필요합니다. JVM 내에서이 코드를 호출해야하므로 jruby 명령을 사용하지 않습니다. 다른 아이디어? –

+0

당신이하려는 것은 이미 내 대답에 손을 대었기 때문에 이식 가능하게 "불가능"합니다. gem_HOME'을 FS에 설치하지만'java -jar'를 사용하는 것보다 - 작동하지 않는 (같은 보석이 설치된'GEM_HOME'이있는 컴퓨터에 설치되어 있지 않다면). ** jruby-complete-1.6.7.jar **에는 jyar 내부에 보석을 넣기 위해 (기본 *) rubygems install (check * META-INF/jruby.home *)이 포함되어 있습니다. https ://github.com/jruby/warbler는 실행 가능한 jruby 항아리에 몇 가지 보석을 넣어 빌드합니다. – kares