2

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

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

我尝试使用以下命令设置相对 url 根:

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 中工作?

4

1 回答 1

2

听起来像是一个设计的东西,你检查过它是如何发出重定向的吗?假设您从操作中执行以下操作,它应该可以工作:

def index
  redirect_to :action => "hello"
end

warble当应用程序在不同于/的 servlet 上下文路径中运行时, jruby-rack(当你包含在内)正确处理情况。我建议扭转你试图让事情正常工作的“黑客”,并查看重定向你的代码......例如,诸如redirect_to "/home/goodbye"不会“工作”(前缀上下文路径)之类的代码被认为是一个完整的 URL小路。

至于config.ruRails 应用程序,Warbler 不会复制它——因此它可以将 Rails 与普通的 Rack 应用程序区分开来(因为jruby-rack对 Rails 做了更多的钩子,以提供与 Tomcat 等 servlet 容器的无缝体验)。

于 2012-07-30T11:03:35.980 回答