2013-04-15 2 views
1

저는 3 일 동안이 문제를 해결하려고 노력했지만 해결책을 찾지 못했습니다.Jruby 애플릿에서 보석을 올바르게 작동시키는 방법은 무엇입니까?

그래서 Jruby-complete-1.7.3 jar를 다운로드했습니다. 그 후, 나는 기본적인 방법을 사용하여 보석 '노코 기리'설치하려고 시도했다 : 또한

java -jar jruby-complete-1.7.3 -S gem install nokogiri 

을, 나는 보석 -에 - A-항아리 방법을 사용하여 만든 별도의 항아리가있다. 이 여분의 병은 아래의 문제를 해결하려고 시도한 결과 일뿐입니다. 내 웹 응용 프로그램 내에서 애플릿에 JRuby를 항아리를 사용하려고하면

require 'nokogiri' 
=> true 

이제, 문제가 발생 : 나는 IRB를 통해 그것을 테스트 할 때 두 경우 모두

는 다음과 같은 저를 보여줍니다 . 구체적으로 말하자면 어떤 보석 파일 (이 경우에는 nokogiri)에 액세스하지 않으면 항아리 자체를로드하고 애플릿에서 상호 작용할 수 있습니다. 그러나 이런 일이 일어나기 위해서는 항아리에 서명해야합니다.

jar 파일이 서명되지 않은 경우 Ruby 인스턴스를 만들지 못해 jar 파일이 작동하지 않습니다. 그것이 서명 될 때, 그것은 잘 작동합니다.

문제 항아리에 서명하면, 내가 전에했던 같은 명령을 호출하려고, 나는 다음과 같은 오류를 얻을 수 있습니다 :

require 'nokogiri' 

LoadError: load error: nokogiri/nokogiri -- java.lang.RuntimeException: 
(LoadError) class "nokogiri.EncodingHandler$INVOKDER$s$1$0$get"'s signer 
information does not match signer information of other classes in the same 
package. 

나는 관해서 주위에 꽤 검색했습니다 이 오류에 대한 원인과 잠재적 인 해결책을 제시하지만, 왜 보석 자체가 그 원인인지 파악할 수 없습니다. Gem-In-A-Jar 메서드를 사용하는 동안 gem_jar에 동일한 키를 사용했습니다.

업데이트 : 내가 잘못했음을 알립니다. 설치된 각 보석에는 lib 디렉토리 내에 고유 한 jar 파일이 있습니다. 이 항아리는 동일한 키로 서명해야합니다. 그렇게 한 후 위의 문제가 해결되었습니다. 그러나, 아래 하나가 남아 있습니다.

내 웹 응용 프로그램에서 실행하려고 할 때 또한, 나는 다음과 같은 메시지가 얻을 : 제가 위에서 언급 한 오류가 발생하면이 던져진 예외는 가정,하지만 난 할 수 없습니다

classpath:/META-INF/jruby.home/lib/ruby/shared/rubygems.rb:396 warning: 
can't canonicalize loaded names due to security restrictions; disabling 

을 확실하게 말해라.

나는 내가 잘못한 것을 말해 줄 수있는 사람을 진심으로 감사 할 것입니다. 또는 그것을 고치는 방법에 대한 제안을 제공 할 것입니다. 질문을 잘못 말했거나 충분한 정보를 제공하지 않은 경우 알려주십시오.

감사

+0

한 가지 해결책은 SDK 도구를 사용하여 모든 Jar에서 서명을 제거하고 모두 디지털 서명하는 것입니다. 다른 Jar 파일에 같은 패키지의 클래스가 있습니까? –

+0

답장을 보내 주셔서 감사합니다! 나는 네가 옳을 수도 있다고 생각한다. 아니요. 클래스는 단일 jruby-complete-1.7.3 jar 파일 내에 있어야합니다. –

+0

게시물을 편집했습니다. 나는 실제로 틀렸어. nokogiri gem은 같은 열쇠로 서명해야 할 jar 파일을 가지고있다. 답장을 보내 주셔서 다시 한번 감사드립니다. 그러나, 그것은 여전히 ​​내 애플릿에서 작동하지 않습니다. 나는 여전히 "canonicalize can not"오류를 얻는다. –

답변

0

하나의 솔루션은 모든 항아리에서 서명을 제거하고 디지털 갓 그들 모두에 서명하기 위해 SDK 도구를 사용하는 것입니다.

관련 문제