3

「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と一緒に実行されているため、ルートアプリにすることはできません。

4

2 に答える 2

4

私はstackoverflow.comで同様の質問を見つけました。ファイル/config.ruで、次のことを行いました。

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

また、新しいWARをデプロイする前に、Tomcatによって作成されたフォルダーを吹き飛ばしてWARファイルを展開する必要がありました。

次に、私のアプリは/ abc URLスコープで動作し、スタンドアロンでも、Tomcatを使用したWARファイルでも同じように動作しました。

編集

これをconfig/environment/production.rbおよびconfig/environment / development.rb(本番モードの場合)にも追加するもう1つのこと:

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

そうしないと、ビューでstylesheet_link_tagなどのヘルパーを呼び出すと、「/abc」なしでリンクが生成されます。

于 2011-11-01T15:35:57.527 に答える
0

最善の解決策は、TomcatでROOTアプリとしてwebappを実行することです。これにより、すべてのURLに「/abc」を含める必要がなくなります。

于 2011-11-02T03:13:05.000 に答える