2012-12-09 5 views
2

Tomcat에서 로컬로 배포 한 Simple 애플리케이션과 Google App Engine 및 Heroku가 있습니다.Heroku에서 JSTL URL 태그가 작동하지 않습니다.

이 앱은 JSTL 태그를 사용하며, Heroku에서만 URL 태그 (<c:url value="/someUrl"/>)가 모든 것을 스크류하는 추가 슬래시 앞에 붙는 것을 제외하고는 모든 배포에서 정상적으로 작동합니다. 여기의 의미는 다음과 같습니다 응용 프로그램이 "TestApp가"의 컨텍스트 배포 내 로컬 톰캣에서

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

페이지에서 다음 문자열을 genreate 것이다 냈다 위의 코드 :

"/ testapp를/laundryLists/search.htm "

올바른 내용입니다. 내 GAE에서

이 주소 testApp.appspot.com에 앉아 응용 프로그램을 배포, 위의 코드는 생성

올바른 "/laundryLists/search.htm"

, 여기에 있기 때문에 응용 프로그램을 문맥에 "/"(루트)에 배포 내 Heroku가 버전에서

이다 "testApp.herokuapp.com"

정확한 동일한 코드를 생성합니다

"//laundryLists/search.htm"(이 앞으로 처음에 슬래시 통지) 링크에 배치하는 경우 때문에, 잘못

, 같은

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

로 링크 URL이 될 것입니다 :

http://laundryLists/search.htm 

이것은 분명히 잘못되었습니다.

"forEach"와 같은 다른 JSTL 태그가 Heroku에서 잘 작동한다는 것을 언급 할 가치가 있습니다.

내 질문은 이것이 왜 Heroku에서 발생하며 어떻게 해결할 수 있습니까 (URL 하드 코딩 이외)?

답변

2

deploying WAR files to Heroku 인 경우 WAR 파일은 Webapp Runner으로 시작됩니다.이 파일은 명령 줄에서 쉽게 실행할 수 있도록 Tomcat을 감싸는 단순한 래퍼입니다. Webapp Runner의 현재 배포 된 버전에서 기본 컨텍스트 경로는 /이며 추가 슬래시가 오는 곳입니다. 빈 문자열을 포함하여 다른 경로를 설정하려면 --path 매개 변수를 사용할 수 있습니다.

heroku config:add WEBAPP_RUNNER_OPTS="--path ''" 
1

무엇 ryanbrainard가 말했다 무엇을하고 경우 누군가에 추가하려면 내가했던 것과 같은 문제가 있었다 : WAR 배포를 사용하여 Heroku가 응용 프로그램에 대해이 작업을 설정하려면, 당신은 그것을 thisr 같은 WEBAPP_RUNNER_OPTS 구성 VAR에 설정할 수 있습니다. 명령 행에서이 플래그를 설정하려고하면 배포 할 때 아무 효과가 없다는 것을 알았습니다. 아마도 git push를 수행 할 때 배포했기 때문에 명령 줄을 사용하여 전쟁을 배포하지 않았을 것입니다.

내 프로젝트에서/Procfile을 업데이트하고 거기에 옵션을 추가해야했습니다. 따라서 내 모습은 다음과 같습니다 : 웹 : java $ JAVA_OPTS -Dspring.profiles.active = prod -jar target/dependency/webapp-runner.jar --port $ PORT --path ''target/*.전쟁

이것은 나를 위해이 문제를 해결했습니다.

관련 문제