[英]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.