1

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
4

1 に答える 1

0

jruby-pageantそれで、私は宝石を見逃していたことがわかりました。これをバンドルに追加するとjruby -S warble、期待される出力が生成されました。

于 2013-07-31T16:42:31.403 に答える