2

ローカル(Tomcat)、およびGoogleAppEngineとHerokuにデプロイしたシンプルなアプリケーションがあります。

アプリはJSTLタグを使用し、すべてのデプロイメントで正常に機能します。ただし、URLタグ(<c:url value="/someUrl"/>)は、Herokuでのみ、すべてを台無しにする余分なスラッシュを追加します。これが私が意味することです:

<c:url value='/laundryLists/search.htm'/>

アプリが「testApp」のコンテキストでデプロイされている私のローカルTomcatでは、上記のコードを切り取ると、ページに次の文字列が生成されます。

"/testApp/laundryLists/search.htm"

どちらが正しい。

アドレスtestApp.appspot.comにある私のGAEデプロイ済みアプリでは、上記のコードスニペットは次を生成します。

"/laundryLists/search.htm"

ここではアプリのコンテキストが「/」(ルート)であるため、これは正しいです。

「testApp.herokuapp.com」にデプロイされている私のHerokuバージョンでは

まったく同じコードが生成します:

"//laundryLists/search.htm"(先頭にスラッシュが2つ付いていることに注意してください)

リンクに配置されている場合など、これは間違っています

<a href="<c:url value='/laundryLists/search.htm'/>">whatever</a>

リンクURLは次のようになります。

http://laundryLists/search.htm

これは明らかに間違っています。

他のJSTLタグ(「forEach」など)がHerokuで正常に機能することは言及する価値があります。

だから私の質問は、なぜこれがHerokuで起こっているのか、そしてどうすればそれを修正できますか(URLをハードコーディングする以外に)?

4

2 に答える 2

2

WARファイルをHerokuにデプロイする場合、WARファイルはWebapp Runnerで起動されます。これは、Tomcatの薄いラッパーであり、コマンドラインから簡単に実行できます。現在デプロイされているバージョンのWebappRunnerでは、デフォルトのコンテキストパスはです/。これは、余分なスラッシュが由来する場所です。パスを他の何か(空の文字列を含む)に設定するには、--pathパラメーターを使用できます。WARデプロイメントを使用してHerokuアプリにこれを設定するには、次のWEBAPP_RUNNER_OPTSようにconfigvarで設定できます。

heroku config:add WEBAPP_RUNNER_OPTS="--path ''"
于 2013-03-27T07:56:03.967 に答える
1

ryanbrainardが言ったことに加えて、誰かが同じ問題を抱えている場合に備えて、私はそうしました。コマンドラインでこのフラグを設定しようとしても、デプロイしたときに効果がないことがわかりました。おそらく、コマンドラインを使用して戦争をデプロイせずにgitpushを実行しているときにデプロイしていたためです。

プロジェクトの/Procfileを更新し、そこにオプションを追加する必要がありました。したがって、私のものは次のようになります。web:java $ JAVA_OPTS -Dspring.profiles.active = prod -jar target /dependenty / webapp-runner.jar --port $ PORT --path'' target/*。war

これで問題は解決しました。

于 2014-04-07T22:07:30.720 に答える