1

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

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 文件中明确包含/排除这些宝石:

config.gems -= ["sqlite3"]

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

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

啁啾中止!

没有要加载的文件——jruby_pageant

如何让 Warbler 相信我想要 JRuby gems?

编辑:

如本文所述,我还尝试在 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 回答