我有一个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中的所有生成的链接,重定向等?
答案 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容器的无缝体验。