我正在部署一个打包到“abc.war”中的 JRuby/Rails 应用程序,并在同一个 Tomcat 实例中部署了一个打包到“def.war”中的 Java 应用程序。
我的 Rails 应用程序中有一个名为“Blogs”的资源,在 routes.rb 中有以下条目
resources :blogs
有了 routes.rb 中的这个条目,我有了 blogs_path() 之类的助手,所以我可以使用如下语句:
<%= link_to "Blogs", blogs_path %>
在我的应用程序视图文件中,点击生成的链接会显示博客列表。
当此应用程序与 Webrick Web 服务器(JRuby 1.6.4,配置了 Ruby 1.9 和 Rails 3.0.10)独立运行时,它工作正常,因为http://localhost:3000/blogs会在我点击了那个链接)。当我将应用程序部署到另一个基本服务器 URL 时,例如“http://funky-freddy-101.heroku.com”,那么我不必使用“blogs_path”更改代码,因为 Rails 会自动计算在构建“blogs_path”生成的实际 URL 时,将基本 URL 和 blogs_path() 代码考虑在内。
在“abc.war”文件中将应用程序部署到 JRuby/Tomcat 时,基本 URL 从http://localhost:3000更改为“http://localhost:8081/abc”。因此键入“http:// localhost:8081/abc/blogs" 会给我一个博客列表,"http://localhost:8081/blogs" 给我一个 404 错误。但是,问题是虽然应用程序的基本 URL包括 WAR 文件名的后缀(即“abc”)Rails 没有注意到这一点,因此在调用 blogs_path() 时仍会生成“http://localhost:8081/blogs”作为 URL。当我点击链接,它给了我标准的Tomcat 404页面。
是否有任何简单的方法可以让 Rails 获取以引用“abc”为后缀的基本 URL、WAR 文件的名称,并在 JRuby/Tomcat 部署中适当地生成 URL?而且因为这个应用程序是和 def.war 一起运行的,所以我不能让它成为根应用程序。