2012-01-16 45 views
1

我有一個簡單的Sinatra應用程序,我將作爲戰爭在tomcat中託管。當我在warcat中運行它並在tomcat中運行它時,一切正常。如果我設置了Ruby 1.9的國旗在我顫聲配置使用Warbler創建jRuby 1.9 Sinatra應用程序無法啓動

config.webxml.jruby.compat.version =「1.9」

那麼戰爭不跑,我在tomcat日誌中出現此錯誤

INFO: An exception happened during JRuby-Rack startup 
no such file to load -- mysinatraapp 
--- System 
jruby 1.6.5.1 (ruby-1.9.2-p136) (2011-12-27 1bf37c2) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_29) [darwin-x86_64-java] 
Time: 2012-01-16 10:06:32 -0600 
Server: Apache Tomcat/7.0.23 
jruby.home: file:/apache-tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/jruby-stdlib-1.6.5.1.jar!/META-INF/jruby.home 

--- Context Init Parameters: 
jruby.compat.version = 1.9 
jruby.max.runtimes = 1 
jruby.min.runtimes = 1 
public.root =/
rack.env = production 

--- Backtrace 
LoadError: no such file to load -- mysinatraapp 
     require at org/jruby/RubyKernel.java:1047 
     require at file:/apache-tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/jruby-stdlib-1.6.5.1.jar!/META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36 
     (root) at /apache-tomcat-7.0.23/webapps/ROOT/WEB-INF/config.ru:2 
    instance_eval at org/jruby/RubyBasicObject.java:1720 
    initialize at file:/apache-tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/jruby-rack-1.1.3.jar!/vendor/rack-1.3.6/rack/builder.rb:51 
     (root) at /apache-tomcat-7.0.23/webapps/ROOT/WEB-INF/config.ru:1 

mysinatraapp.rb文件在戰爭中,所以我不明白爲什麼它找不到它。從jruby的命令行運行時,應用運行良好,所以我不認爲這是我的代碼和1.9的兼容性問題。即使只是從web.xml刪除這些行

<context-param> 
<param-name>jruby.compat.version</param-name> 
<param-value>1.9</param-value> 
</context-param> 

將讓應用程序啓動正常。

我罐子的版本是 JRuby的核心1.6.5.1.jar JRuby的機架1.1.3.jar JRuby的STDLIB-1.6.5.1.jar

回答

0

我認爲這是可以解釋的通過1.8和1.9之間的負載路徑行爲(MRI也是如此,不僅僅是JRuby)的微妙變化。證人:

$ jruby -v -rpp -e 'pp $LOAD_PATH' 
jruby 1.7.0.dev (ruby-1.8.7-p357) (2012-01-12 0e83d96) (Java HotSpot(TM) Client VM 1.6.0_29) [darwin-i386-java] 
["/Users/nicksieger/Projects/ruby/jruby/lib/ruby/site_ruby/1.8", 
"/Users/nicksieger/Projects/ruby/jruby/lib/ruby/shared", 
"/Users/nicksieger/Projects/ruby/jruby/lib/ruby/1.8", 
"."] 

$ jruby -v --1.9 -rpp -e 'pp $LOAD_PATH' 
jruby 1.7.0.dev (ruby-1.9.3-p6) (2012-01-12 0e83d96) (Java HotSpot(TM) Client VM 1.6.0_29) [darwin-i386-java] 
["/Users/nicksieger/Projects/ruby/jruby/lib/ruby/site_ruby/1.9", 
"/Users/nicksieger/Projects/ruby/jruby/lib/ruby/shared", 
"/Users/nicksieger/Projects/ruby/jruby/lib/ruby/1.9"] 

所以你可能要明確地添加'.'$servlet_context.getRealPath("/WEB-INF")裏面config.ru負載路徑。

相關問題