我有一个Rails应用程序,我想将它编译/打包为一个WAR文件,以便在Tomcat中托管。我已经添加了我能找到的所有相关内容,但是WAR似乎只包括非JRuby版本的宝石。因此,我在Tomcat中获得了诸如“无法找到activerecord适配器”之类的GemNotFound异常。如果我在7-zip中打开WAR文件,它将不会显示/WEB/ gems /gems下的任何JRuby或Java。
莺不报告任何错误或警告,战争似乎包含了它所需要的一切,除了这些宝石。
(因为这是一个轻量级的内部应用程序,我现在使用sqlite .这就解释了方形宝石。数据库存储在项目之外,并在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宝石,jruby -S bundle install可以正常工作,但是warble会给出一系列错误,说明gems只适用于JRuby。另一方面,如果我试图在JRuby (jruby -S warble)中运行它,就会得到:
战舰流产了! 没有这样的文件要加载-- jruby_pageant
我怎样才能让莺相信我想要JRuby宝石?
编辑:
我还尝试在but文件中指定平台,如在这篇博客文章中所描述的,但这会导致堆栈溢出。
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版本:
发布于 2013-07-31 16:42:31
原来我错过了jruby-pageant宝石。一旦我将它添加到包中,jruby -S warble就产生了预期的输出。
https://stackoverflow.com/questions/17973917
复制相似问题