Tomcat で戦争としてホストする単純な Sinatra アプリがあります。ワーブルしてTomcatで実行すると、すべて正常に動作します。ウォーブル設定で Ruby 1.9 フラグを設定した場合
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>
アプリの起動を正常にします。
私のjarのバージョンはjruby-core-1.6.5.1.jar jruby-rack-1.1.3.jar jruby-stdlib-1.6.5.1.jarです