Warbler不打包Java / JRuby宝石?

时间:2013-07-31 14:58:14

标签: jruby warbler

我有一个Ruby on Rails应用程序,我希望将其编译/打包为WAR文件以在Tomcat中托管。我已经添加了所有可以找到的相关内容,但WAR似乎只包含了非JRuby版本的gem。结果,我在Tomcat中获得了GemNotFound异常,例如“找不到activerecord-jdbc-adapter”。如果我以7-zip打开WAR文件,它不会在/ WEB-INF / gems / gems下显示任何JRuby或Java宝石。

Warbler不报告任何错误或警告,并且WAR似乎包含它所需的一切,除了这些宝石。

(因为这是一个轻量级的内部应用程序,我现在正在使用sqlite ...这解释了sqlite gems。数据库存储在项目外部并在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

我还尝试在warble.rb文件中明确包含/排除这些gems:

config.gems -= ["sqlite3"]

config.gems += [
  "jdbc-sqlite3",
  "activerecord-jdbc-adapter",
  "activerecord-jdbcsqlite3-adapter",
  "jruby-openssl",
  "jruby-rack",
  "warbler"
]

作为一个有趣的旁注,如果我修改我的Gemfile以要求JRuby宝石,jruby -S bundle install工作正常,但warble给出了一系列错误,说明这些宝石仅用于JRuby。另一方面,如果我尝试在JRuby(jruby -S warble)中运行它,我得到:

  战争中止了!

     

没有要加载的文件 - jruby_pageant

我如何说服Warbler我想要JRuby宝石?

修改

我也尝试在gem文件中指定平台,如in this blog post所述,但是这会导致堆栈溢出。

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

版本:

  • ruby​​ 1.9.3
  • jruby 1.7.4
  • warbler 1.3.8

1 个答案:

答案 0 :(得分:0)

事实证明我错过了jruby-pageant宝石。将此添加到捆绑包后,jruby -S warble生成了预期的输出。