当尝试将JRuby/Rails应用程序部署到Weblogic 10.3 (Solaris Zone)容器时,它总是遇到这个异常:
org.jruby.rack.RackInitializationException: library `fcntl' could not be loaded: java.lang.NullPointerException
from /xyz/war/WEB-INF/gems/gems/activesupport-3.0.6/lib/active_support/dependencies.rb:239:in `require'
from /xyz/war/WEB-INF/gems/gems/activesupport-3.0.6/lib/active_support/dependencies.rb:225:in `load_dependency'
from /xyz/war/WEB-INF/gems/gems/activesupport-3.0.6/lib/active_support/dependencies.rb:596:in `new_constants_in'
from /xyz/war/WEB-INF/gems/gems/activesupport-3.0.6/lib/active_support/dependencies.rb:225:in `load_dependency'
from /xyz/war/WEB-INF/gems/gems/activesupport-3.0.6/lib/active_support/dependencies.rb:239:in `require'
from /xyz/war/WEB-INF/gems/gems/jruby-openssl-0.7.3/lib/openssl/ssl.rb:19:in `(root)'
from org/jruby/RubyKernel.java:1038:in `require'
[..snip...]
它只是不明白为什么JRuby无法加载这个核心库。这似乎与Solaris有关,因为在MacOS X上安装WLS并在本地部署没有任何问题。
任何提示,或指针,我可以看看下一步-或如何解决这个问题?
更新:可能是一个bug(在IRC/#jruby中得到了反馈,现在在jruby JIRA中得到了跟踪,参见:http://jira.codehaus.org/browse/JRUBY-5753
我通过将-d32
添加到JAVA_OPTS
来解决这个问题,以强制使用32位JVM。
我在使用Tomcat 7和Jruby 1.7.2的Centos 5和OSX上遇到了这个问题。还有一个sqlite3 db。我通过四处闲逛解决了这个问题,我不确定为什么我所做的解决了它,但我发现了一些事情:在重新启动Tomcat后,由于之前的崩溃导致DB锁定,我得到了这个错误。ActiveRecord::StatementInvalid (Java::JavaLang::Error: Internal Error in _sycall (): SELECT "urls")。* FROM "urls"):
下面的步骤似乎解决了这个问题,尽管在我看来,原来的错误只是表明DB进入一个坏的状态。-我将Jruby降级到1.7.1删除gemfile中除了activerrecord -jdbcsqlite3-adapter之外的所有与db相关的gem。这似乎解决了这个问题。(我删除的宝石是'sqlite-ruby','sqlite3',' activerrecord -jdbc-adapter', 'jruby-rack')我注意到这里的第一个宝石是一个普通的C宝石,它不应该被部署,因为它不是在一个条件,但似乎被包括在warbler的战争中。无论如何,我重新部署,它工作,甚至使用原来的DB。