JRuby 9.4.0.0与Weblogic 12.2.1.4部署兼容性问题求助
报错信息
resetting rack response due exception: org.jruby.rack.RackInitializationException: No such file or directory - C:/logs/oracle/wls/app/app.log from org/jruby/RubyIO.java:1255:in 'sysopen' from org/jruby/RubyFile.java:362:in 'initialize' from org/jruby/RubyClass.java:931:in 'new' from org/jruby/RubyIO.java:1174:in 'open' from...
环境背景
- 该WAR包在JRuby 1.7.4 + Weblogic 12.1.3环境可正常运行,切换到JRuby 9.4.0.0 + Weblogic 12.2.1.4后报错
- Gemfile配置:
ruby '3.1.0' #hardcoded version for Weblogic joda-time bug gem 'jruby-jars', '1.7.4'
- WEB-INF/lib包含的JAR:
- jruby-complete-9.4.0.0.jar
- jruby-rack-1.1.22.jar
- kryptcore.jar
- kryptproviderjdk.jar
- ojdbc6.jar
- 移除的原环境JAR(因bouncycastle问题):
- jruby-rack-1.1.14
- jruby-core-1.7.4
- bcprov-jdk15on-1.47
- bcpkix-jdk15on-1.47
- jopenssl
- 新增了jruby-complete-9.4.0.0.jar(预期包含jruby-core和jopenssl)
问题疑问
是否为JAR包兼容性问题?
解答
先排查文件路径基础问题:
检查Weblogic服务器上C:/logs/oracle/wls/app/目录是否存在,以及运行Weblogic的用户是否拥有该目录的读写权限。JRuby 9.x对文件路径的处理比1.7.x更严格,即使逻辑和旧版本一致,也可能因权限或目录缺失触发报错。修复Gemfile版本冲突:
Gemfile指定了jruby-jars:1.7.4,但实际运行用的是JRuby 9.4.0.0,版本不匹配会引发兼容性问题。JRuby 9.x对应Ruby 2.5+语法,你指定的ruby '3.1.0'需要JRuby 9.3+支持,建议将jruby-jars版本升级到与JRuby 9.4.0.0匹配的版本(如9.4.0.0)。适配JRuby-Rack与Weblogic版本:
jruby-rack-1.1.22虽支持JRuby 9.x,但Weblogic 12.2.1.4的Servlet容器环境和12.1.3存在差异。建议尝试升级jruby-rack到最新兼容版本(如1.2.19),同时检查WEB-INF/web.xml中的rack servlet配置是否适配新版本。调整Weblogic类加载优先级:
Weblogic 12.2.1.4可能自带与JRuby冲突的类(如bouncycastle相关),即使移除项目中的对应JAR,服务器自身类库仍可能干扰。可在WEB-INF/weblogic.xml中配置<prefer-web-inf-classes>true</prefer-web-inf-classes>,强制优先加载项目WEB-INF/lib中的类,避免与服务器自带类冲突。验证JRuby Complete包完整性:
确认jruby-complete-9.4.0.0.jar确实包含jopenssl和jruby-core的完整内容,若下载的包损坏或不完整,建议从官方渠道重新下载替换。
内容的提问来源于stack exchange,提问作者Antonino Scarpelli

