我有一个JRuby on Rails 3.1.6应用程序,我想把它作为WAR文件部署在Tomcat7上。为了生成war,我使用了warbler。
我可以将应用程序部署到服务器上,一切都在运行。但生成的链接或设计到/users/sign_in的重定向表单不起作用,因为上下文路径被忽略了。
我尝试使用以下命令设置相对url根:
config.action_controller.relative_url_root = '/foo'但是没有找到方法。(我也尝试了ENV变量,但什么也没有发生)
我试图在我的routes.rb中使用scope '/foo',但这也不起作用。
我还尝试在我的config.ru中添加以下内容
map '/foo' do
run Foo::Application
end 但是config.ru文件看起来不会包含在WAR文件中,也不会以任何方式使用。
我不能在tomcat中生成VirtualHost或任何东西,我只有权将应用程序部署为WAR文件。有没有办法告诉rails应用程序它在给定子目录(上下文路径)下运行,以便将其添加到在Rails 3.1.6中工作的所有生成的链接、重定向等中?
发布于 2012-07-30 19:03:36
听起来像是Devise的事情,你检查过它是如何发出重定向的吗?假设您在一个操作中执行了类似以下操作,那么它应该是有效的:
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中做了更多的钩子,以提供与servlet容器,如Tomcat的无缝体验一样)。
https://stackoverflow.com/questions/11542314
复制相似问题