3

这是我在部署 Ruby on Rails Web 应用程序(使用 Jetty)时遇到的错误:

2012-07-17 13:11:25,595,INFO,service.nav.server - An exception happened during JRuby-Rack startup
Could not find root path for #<Usermanagement::Engine:0x302abefe>

--- Backtrace
RuntimeError: Could not find root path for #<Usermanagement::Engine:0x302abefe>
find_root_with_flag at file:/tmp/Jetty_0_0_0_0_2525_ui.0.0.1.SNAPSHOT.war____d9z055/webapp/WEB-INF/lib/gems.jar!/gems/railties-3.1.3/lib/rails/engine.rb:599
config at file:/tmp/Jetty_0_0_0_0_2525_ui.0.0.1.SNAPSHOT.war____d9z055/webapp/WEB-INF/lib/gems.jar!/gems/railties-3.1.3/lib/rails/engine.rb:479
railties at file:/tmp/Jetty_0_0_0_0_2525_ui.0.0.1.SNAPSHOT.war____d9z055/webapp/WEB-INF/lib/gems.jar!/gems/railties-3.1.3/lib/rails/engine.rb:423
initializers at file:/tmp/Jetty_0_0_0_0_2525_ui.0.0.1.SNAPSHOT.war____d9z055/webapp/WEB-INF/lib/gems.jar!/gems/railties-3.1.3/lib/rails/engine.rb:473
....

用户管理是以 Rails 引擎的形式本地构建的 gem。它是一个独立的可挂载引擎——用户管理是独立的命名空间。gem 是用 Rails 3.1.3 构建的

检查gems.jar构建的 WAR 中的文件,并且用户管理 gem 在那里,以及config目录和lib目录等必需的东西。

我很难找到导致此中断的特定提交。看起来更像是环境问题。

欢迎任何建议!

4

1 回答 1

2

显然,这个错误实际上是由 Usermanagement gem 中包含 .class 文件引起的。

由于我们构建服务器的权限要求,我们在构建过程中将 gems 安装到本地文件夹 - 即project-name/gems/gems

这一切都很好,但是,然后使用 Warbler 构建 war 文件,并且 Warbler 从.rb它在项目目录中找到的所有文件创建类文件 -创建 gems.jar 文件之前。因此,我们最终得到.classgems.jar存档中的文件。

对于为什么拥有类文件会破坏一切,我仍然有些不知所措-但是,没有它们确实可以解决所有问题:)

解决方案

告诉 Warbler 不要gems在 webapp 中包含该目录:(在 warbler.rb 中)

config.dirs = %w(app config lib log tmp)
于 2012-07-27T15:27:40.530 回答