JRuby Rails 3.1.6在Tomcat 7子目录中部署WAR(重定向和链接不使用子目录)

时间:2012-07-18 13:16:23

标签: tomcat deployment ruby-on-rails-3.1 jruby rails-routing

我有一个JRuby on Rails 3.1.6应用程序,并希望将它作为WAR文件部署在Tomcat 7上。为了产生战争,我使用了warbler。

我可以将应用程序部署到服务器,并且所有应用程序都在运行。但是生成的链接或重定向表单设计为/users/sign_in不起作用,因为忽略了上下文路径。

我尝试将相对网址设置为:

config.action_controller.relative_url_root = '/foo'

但是找不到方法。 (也尝试了ENV变量,但没有发生任何事情)

我尝试在scope '/foo'中使用routes.rb,但这也不起作用。

我还尝试在config.ru

中添加此内容
map '/foo' do
  run Foo::Application
end 

但是config.ru文件接缝不会包含在WAR文件中或以任何方式使用。


我无法在tomcat中生成VirtualHost或任何内容,我只有将应用程序部署为WAR文件的权限。有没有办法告诉rails应用程序它在给定的子目录(上下文路径)下运行,所以它将它添加到Rails 3.1.6中的所有生成的链接,重定向等?

1 个答案:

答案 0 :(得分:2)

听起来像设计的东西,你检查过它是如何发布重定向的吗? 它应该有效,假设您执行以下操作:

def index
  redirect_to :action => "hello"
end
当应用程序在不同于 / 的servlet上下文路径中运行时,

jruby-rack (当warble时包含)会正确处理这些情况。我建议扭转你试图让事情发挥作用的“黑客”并查看重定向你的代码......例如像redirect_to "/home/goodbye"这样的代码不会“工作”(前缀为上下文路径),因为它假定为完整的URL路径。

对于Rails应用程序的config.ru,Warbler不会复制它 - 因此它可以区分Rails和普通的Rack应用程序(因为 jruby-rack 更多地挂钩到Rails提供与Tomcat等servlet容器的无缝体验。