JRuby:Warbler:Tomcat:Rails助手没有获得带有WAR扩展名后缀的基本URL

时间:2011-10-31 19:52:47

标签: tomcat jrubyonrails warbler

我正在部署一个打包成“abc.war”的JRuby / Rails应用程序,并在同一个Tomcat实例中使​​用打包到“def.war”的Java应用程序进行部署。

我的Rails应用程序中有一个名为“Blogs”的资源,在routes.rb中有以下条目

resources  :blogs

使用routes.rb中的这个条目,我有hels,例如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获取基本URL后缀为引号“abc”,WAR文件的名称,并在JRuby / Tomcat部署中正确生成URL?因为这个应用程序与def.war一起运行,所以我无法将其作为root应用程序。

2 个答案:

答案 0 :(得分:4)

我找到了similar question on stackoverflow.com。在 /config.ru 文件中,我执行了以下操作:

map '/abc' do
   run Abc::Application
end 

我还必须确保在部署新WAR之前,我已经删除了Tomcat创建的文件夹以扩展我的WAR文件。

然后我的应用程序只在/ abc URL范围内工作,无论是独立的还是在带有Tomcat的WAR文件中,它的工作方式都相同。

修改

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

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

否则当您在视图中调用stylesheet_link_tag等助手时,他们将生成没有“/ abc”的链接。

答案 1 :(得分:0)

最好的解决方案是在Tomcat下运行webapp作为ROOT应用程序,它将不再需要在所有网址中包含“/ abc”。