Tomcat でホストする WAR ファイルとしてコンパイル/パッケージ化したい Ruby on Rails アプリがあります。関連するものはすべて追加しましたが、WAR には JRuby 以外のバージョンの gem しか含まれていないようです。その結果、Tomcat で「could not find activerecord-jdbc-adapter」などの GemNotFound 例外が発生します。7-zip の WAR ファイルを開くと、/WEB-INF/gems/gems の下に JRuby または Java gem が表示されません。
Warbler はエラーや警告を報告せず、WAR にはこれらの gem を除いて必要なものがすべて含まれているようです。
(これは軽量の内部アプリであるため、今のところ sqlite を使用しています... sqlite gem について説明しています。DB はプロジェクトの外部に保存され、database.yml ファイルで構成されます。)
私の Gemfile からの関連するスニペット:
if defined?(JRUBY_VERSION)
gem 'jdbc-sqlite3'
gem 'activerecord-jdbc-adapter'
gem 'activerecord-jdbcsqlite3-adapter'
gem 'jruby-openssl'
gem 'jruby-rack'
else
gem 'sqlite3'
end
また、これらの gem を warble.rb ファイルに明示的に含めたり除外したりしようとしました。
config.gems -= ["sqlite3"]
config.gems += [
"jdbc-sqlite3",
"activerecord-jdbc-adapter",
"activerecord-jdbcsqlite3-adapter",
"jruby-openssl",
"jruby-rack",
"warbler"
]
興味深い補足として、JRuby gem を要求するように Gemfile を変更すると、正常にjruby -S bundle install
動作しますがwarble
、gem は JRuby でのみ使用されるという一連のエラーが表示されます。一方、JRuby ( jruby -S warble
) 内で実行しようとすると、次のようになります。
鳴き声は中止されました!
ロードするファイルがありません -- jruby_pageant
JRuby gem が欲しいことを Warbler に納得させるにはどうすればよいですか?
編集:
このブログ投稿で説明されているように、gemfile でプラットフォームを指定することも試みましたが、これによりワーブルがスタック オーバーフローします。
platforms :jruby do
gem 'jdbc-sqlite3'
gem 'activerecord-jdbc-adapter', :require => false
gem 'activerecord-jdbcsqlite3-adapter', :require => false
gem 'jruby-openssl'
gem 'jruby-rack'
end
platforms :ruby do
gem 'sqlite3'
end
バージョン:
- ルビー1.9.3
- jruby 1.7.4
- ウグイス1.3.8