English 中文(简体)
JRuby:Warbler:Tomcat:Rails助手没有获得带有WAR扩展后缀的基本URL
原标题:JRuby: Warbler: Tomcat: Rails helpers not getting base URL with WAR extension suffix

我正在部署一个打包到“abc.war”中的JRuby/Rails应用程序,它与打包到“def.war”中的Java应用程序一起部署在同一Tomcat实例中。

我的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会自动计算出基本URL,而blogs_paath()代码在构建“blogs_path”生成的实际URL时会考虑到这一点。

在文件“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并没有意识到这一点,因此仍然会生成”http://localhost:8081/blogs”作为调用blogs_path()时的URL。当我点击链接时,它会给我标准的Tomcat404页面。

有没有什么简单的方法可以让Rails获得以引用“abc”(WAR文件的名称)作为后缀的基本URL,并在JRuby/Tomcat部署中适当地生成URL?由于这个应用程序与def.war一起运行,我无法将其作为根应用程序。

最佳回答

我发现了stackoverflow.com上的类似问题。在文件/config.ru中,我做了以下操作:

map  /abc  do
   run Abc::Application
end 

我还必须确保在部署新的WAR之前,我销毁了Tomcat创建的用于扩展WAR文件的文件夹。

然后,我的应用程序只是在/abc URL范围下工作,无论是独立的还是在Tomcat的WAR文件中,它都能正常工作。

编辑

您还可以将其添加到config/environments/production.rb和config/eenvironments/development.rb中(如果处于生产模式):

config.action_controller.asset_path = proc { |path| "/abc#{path}" }

否则,当您在视图中调用诸如stylesheetlinktag之类的助手时,它们将生成不带“/abc”的链接。

问题回答

最好的解决方案是在Tomcat下将Web应用程序作为ROOT应用程序运行,这样就不必在所有URL中包含“/abc”。





相关问题
Tomcat´s server.xml dynamic configuration

My web application uses the same database configuration as the application XYZ. I have a resource declaration for a context in server.xml, so I have a duplicated configuration (once for web ...

session transfer issue from Tomcat to ASP.Net

I am using Tomcat to host JSP and using IIS 7.0 to host aspx (C# + .Net 3.5 + VSTS 2008), and I have some session transfer issue from JSP page to ASPX page. JSP page is in one domain and all other ...

JSP exception - class not found (tomcat)

I m setting up an existing application on a new Tomcat 5.5 server connecting to a Postgres database (running on Debian Lenny). When I access it I get a series of stack traces with the following root ...

热门标签