「abc.war」にパックされたJRuby/Railsアプリをデプロイしていますが、同じTomcatインスタンスの「def.war」にパックされたJavaアプリでデプロイされています。
Railsアプリケーションに「Blogs」というリソースがあり、routes.rbに次のエントリがあります。
resources :blogs
このroutes.rbのエントリには、blogs_path()などのヘルパーが含まれているため、次のようなステートメントを使用できます。
<%= link_to "Blogs", blogs_path %>
アプリケーションビューファイルで、生成されたリンクをクリックすると、ブログのリストが表示されます。
このアプリケーションをWebrickWebサーバー(Ruby1.9で構成されたJRuby1.6.4、およびRails 3.0.10)とスタンドアロンで実行すると、http:// localhost:3000/blogsがブログのリストを取得するときに正常に動作します。そのリンクをクリックします)。「http://funky-freddy-101.heroku.com」などの別のベースサーバーURLにアプリをデプロイする場合、Railsは自動的に計算するため、「blogs_path」でコードを変更する必要はありません。ベースURLを出力し、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()が呼び出されたときにURLとして「http:// localhost:8081/blogs」を生成します。リンクをクリックすると、標準のTomcat404ページが表示されます。
Railsに参照「abc」の接尾辞が付いたベースURL、WARファイルの名前を取得し、JRuby / Tomcatデプロイメントで適切にURLを生成する簡単な方法はありますか?また、このアプリケーションはdef.warと一緒に実行されているため、ルートアプリにすることはできません。