2012-07-20 2 views
0

warbler와 함께 번들로 제공되는 두 개의 JRuby Sinatra 웹 응용 프로그램 (런타임 1.9)을 ear 파일에 압축하려고합니다. glassfish (2.1.1 또는 3.1)에 배포 한 후 충돌이 발생했습니다.JRuby rack이있는 다중 war 웹 응용 프로그램

JRuby.jar, jruby-stdlib.jar 및 jruby-rack.jar은 두 응용 프로그램의 클래스 경로에서 액세스 할 수 있으며 둘 중 하나만 남겨두면 올바르게 배포됩니다. 1.8을 사용하는 오류를 바탕으로

[#|2012-07-20T10:00:10.743+0200|INFO|sun-appserver2.1|javax.enterprise.system.container.web|_ThreadID=18;_ThreadName=Thread-34;|PWC1412: WebModule[/licences] ServletContext.log():INFO: jruby 1.6.7.2 (ruby-1.9.2-p312) (2012-05-01 26e08ba) (Java HotSpot(TM) Client VM 1.6.0_30) [linux-i386-java]|#] 

[#|2012-07-20T10:00:10.744+0200|INFO|sun-appserver2.1|javax.enterprise.system.container.web|_ThreadID=18;_ThreadName=Thread-34;|PWC1412: WebModule[/licences] ServletContext.log():INFO: using a shared (threadsafe!) runtime|#] 

[#|2012-07-20T10:00:11.926+0200|INFO|sun-appserver2.1|javax.enterprise.system.container.web|_ThreadID=18;_ThreadName=Thread-34;|PWC1412: WebModule[/licences] ServletContext.log():An exception happened during JRuby-Rack startup 
invalid runtime 
--- System 
jruby 1.6.7.2 (ruby-1.9.2-p312) (2012-05-01 26e08ba) (Java HotSpot(TM) Client VM 1.6.0_30) [linux-i386-java] 
Time: 2012-07-20 10:00:11 +0200 
Server: Sun GlassFish Enterprise Server v2.1.1 
jruby.home: file:/usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/lib/jruby-stdlib.jar!/META-INF/jruby.home 

--- Context Init Parameters: 
com.sun.faces.forceLoadConfiguration = true 
com.sun.faces.injectionProvider = com.sun.faces.vendor.GlassFishInjectionProvider 
com.sun.faces.validateXml = true 
jruby.compat.version = 1.9 
public.root =/
rack.env = production 

--- Backtrace 
RuntimeError: invalid runtime 
     require at org/jruby/RubyKernel.java:1042 
     require at file:/usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/lib/jruby-stdlib.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36 
      Ext at /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json/ext.rb:13 
      JSON at /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json/ext.rb:12 
     (root) at /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json/ext.rb:9 
     require at org/jruby/RubyKernel.java:1042 
     require at file:/usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/lib/jruby-stdlib.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36 
      JSON at /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json/ext.rb:58 
     (root) at /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json.rb:54 
     require at org/jruby/RubyKernel.java:1042 
     require at file:/usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/lib/jruby-stdlib.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:60 
     require at file:/usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/lib/jruby-stdlib.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:55 
     (root) at /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json.rb:3 
     require at org/jruby/RubyKernel.java:1042 
     require at /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/./lib/licences.rb:36 
     (root) at /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/config.ru:1 
    instance_eval at org/jruby/RubyBasicObject.java:1730 
    initialize at /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/rack-1.4.1/lib/rack/builder.rb:51 
     (root) at /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/config.ru:1 

--- RubyGems 
Gem.dir: /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems 
Gem.path: 
/usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems 
Activated gems: 
    rack-1.4.1 
    haml-3.1.6 
    rack-protection-1.2.0 
    tilt-1.3.3 
    sinatra-1.3.2 
    json-1.7.3 

--- Bundler 
undefined method `bundle_path' for Bundler:Module 

--- JRuby-Rack Config 
compat_version = RUBY1_9 
default_logger = [email protected] 
err = [email protected] 
filter_adds_html = true 
filter_verifies_resource = false 
ignore_environment = false 
initial_memory_buffer_size = 
initial_runtimes = 
jms_connection_factory = 
jms_jndi_properties = 
logger = [email protected] 
logger_class_name = servlet_context 
logger_name = jruby.rack 
maximum_memory_buffer_size = 
maximum_runtimes = 
num_initializer_threads = 
out = com.sun.ente[email protected]31c0d7 
rackup = 
rackup_path = 
rewindable = true 
runtime_arguments = 
runtime_timeout_seconds = 
serial_initialization = false 
servlet_context = [email protected] 
|#] 

[#|2012-07-20T10:00:11.928+0200|SEVERE|sun-appserver2.1|javax.enterprise.system.container.web|_ThreadID=18;_ThreadName=Thread-34;_RequestID=bb69f89a-3d4a-46db-9b73-34ab72248271;|WebModule[/licences]ERROR: unable to create shared application instance 
org.jruby.rack.RackInitializationException: invalid runtime 
from file:/usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/lib/jruby-stdlib.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require' 
from /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json/ext.rb:13:in `Ext' 
from /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json/ext.rb:12:in `JSON' 
from /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json/ext.rb:9:in `(root)' 
from org/jruby/RubyKernel.java:1042:in `require' 
from file:/usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/lib/jruby-stdlib.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require' 
from /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json/ext.rb:58:in `JSON' 
from /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json.rb:54:in `(root)' 
from org/jruby/RubyKernel.java:1042:in `require' 
from file:/usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/lib/jruby-stdlib.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:60:in `require' 
from file:/usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/lib/jruby-stdlib.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:55:in `require' 
from /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/gems/gems/json-1.7.3/lib/json.rb:3:in `(root)' 
from org/jruby/RubyKernel.java:1042:in `require' 
from /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/./lib/licences.rb:36:in `require' 
from /usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/licences-web_war/WEB-INF/config.ru:1:in `(root)' 
from.. 

, 그것이 내가 이해할 수없는 이유을 theat에 대한 두 번째 응용 프로그램과 같은 : 내가 그들을 떠날 경우 랙 시작시 에러를 배포하는 동안 그러나 두 번째는 항상 충돌 rubygems :

require at file:/usr/local/glassfish/domains/myapp-domain/applications/j2ee-apps/myapp-server/lib/jruby-stdlib.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36 

내 코드 등에 'rubygems'가 필요하지 않습니다.

내 gemfile.lock는

remote: http://rubygems.org/ 
    specs: 
    haml (3.1.6) 
    jruby-jars (1.6.7.2) 
    jruby-rack (1.1.7) 
    json (1.7.3) 
    mime-types (1.19) 
    rack (1.4.1) 
    rack-protection (1.2.0) 
     rack 
    rack-test (0.6.1) 
     rack (>= 1.0) 
    rake (0.9.2.2) 
    rest-client (1.6.7) 
     mime-types (>= 1.16) 
    rspec-mocks (2.11.1) 
    rubyzip (0.9.9) 
    sinatra (1.3.2) 
     rack (~> 1.3, >= 1.3.6) 
     rack-protection (~> 1.2) 
     tilt (~> 1.3, >= 1.3.3) 
    tilt (1.3.3) 
    warbler (1.3.5) 
     jruby-jars (>= 1.4.0) 
     jruby-rack (>= 1.0.0) 
     rake (>= 0.8.7) 
     rubyzip (>= 0.9.4) 

PLATFORMS 
    x86-mingw32 

DEPENDENCIES 
    haml 
    json 
    rack-test 
    rest-client 
    rspec-mocks 
    sinatra 
    warbler 

미리 감사합니다.

답변

0

glassfish jar 파일의 기본 모양은 전쟁 응용 프로그램간에 공유되며 jruby-rack은 모든 사람이 공유하는 것을 좋아하지 않습니다. sun-web.xml의

일부 변경 클래스 로더

http://docs.oracle.com/cd/E19316-01/820-4336/beadh/index.html

을 분리하는 내 경우에는 필요했다