繁体   English   中英

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

[英]JRuby: Warbler: Tomcat: Rails helpers not getting base URL with WAR extension suffix

我正在部署一个打包成“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自动生成数字out base base和blogs_path()代码在构建“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没有在那上面提取,因此当调用blogs_path()时仍会生成“http:// localhost:8081 / blogs”作为URL。当我点击时链接,它给了我标准的Tomcat 404页面。

是否有任何简单的方法可以让Rails获取基本URL后缀为引号“abc”,WAR文件的名称,并在JRuby / Tomcat部署中正确生成URL? 因为这个应用程序与def.war一起运行,所以我无法将其作为root应用程序。

在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”的链接。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM