我有一个用JRuby(1.7.12)编写的Rails 3.2.13应用程序。我正在使用Mac OS X 10.10进行开发(尽管问题在10.9上也很明显)。我安装了JDK 1.6和1.7。我正在通过torquebox 3.1.1提供应用程序。
如果我启动连接到本地postgres数据库的应用程序,我没有问题。但我需要调试需要连接到Oracle的问题。然后我将我的适配器切换到oracle-enhanced
并确保我在$JRUBY_HOME/lib
中有ojdbc6.jar和ojdbc7.jar。当我通过torquebox启动应用程序时,我得到这样的错误:
14:47:58,242 ERROR [org.torquebox.core.runtime] (pool-8-thread-1) Error during execution: ENV['RAILS_ROOT']=RACK_ROOT
ENV['RAILS_ENV']=RACK_ENV
require %q(org/torquebox/web/rails/boot)
: org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `blame_file!' forjava.lang.StackOverflowError:Java::JavaLang::StackOverflowError
我意识到blame_file!
错误是另一回事。导致该错误的StackOverflowError是我关心的。在尝试加载必要的文件时,它会进入失败的循环,例如rails/boot
。
然而!当我运行“rails console”时,它运行正常,我可以从数据库加载数据。
我确信由于能够加载控制台,这在某种程度上是扭矩盒的问题,但我不知道是什么,也不知道如何解决它。
有没有人可以帮助我?以前有人见过这样的东西吗?感谢。
(编辑,我在应用程序中找到了ojdbc7.jar的本地缓存副本,用1.6解释了我的原始错误。我编辑了这篇文章以反映当前的情况。)
答案 0 :(得分:0)
尝试查看https://github.com/jruby/jruby/issues/976以解决blame_file问题,然后希望您会收到更有用的错误消息。 也许那时你会得到一些能够诊断类似于以下内容的东西: Error while loading java Class in Jruby application
答案 1 :(得分:0)
我在irc.freenode.net/#torquebox上得到了一些帮助。在对堆栈输出与我的堆栈大小有些混淆之后,有人建议我将其扩展一些。我将它设置为4096m(是的,我现在意识到那太荒谬了)到2048k,它确实有效。
我们不知道为什么Java会以这种特定的方式结束,但最终的结果是,如果堆栈大小较小,它现在可以正常工作。