我们正在从旧系统部署webapp(.war文件),我们可以完全控制我们的Tomcat实例到Amazon的Elastic Beanstalk实例。
在我们自己的系统上,我们将Web应用程序作为路径访问(例如,如果我们部署my-app.war,则为http://server-name/my-app
),但Elastic Beanstalk将我们的war文件重命名为ROOT.war,从而使Web成为网络应用程序在http://server-name
下可用,这会破坏我们现有的应用程序。
根据AWS文档,我们在WEB-INF/.ebextensions
下添加了一个配置文件,该文件将以下自定义context.xml
- 文件复制到/etc/tomcat7/Catalina/localhost/ROOT.xml
:
<?xml version='1.0' encoding='utf-8'?>
<Context displayName="localhost" docBase="" path="/my-app">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
我们尝试过此文件的不同版本,例如省略docBase,指定docBase="ROOT"
,使用aliases
参数等,提供ROOT目录的完整路径等,但没有一个使我们的WAR文件可以在/my-app
路径下访问。
最后,我们还尝试将此<Context />
- 定义放在<Host />
的{{1}}部分下,但无济于事。有什么建议吗?
更新:在server.xml
定义下向server.xml
添加以下内容时,我能够在正确的路径下访问<Host/>
,但似乎EB上的Tomcat现在正在两次部署我的应用程序:
my-app
答案 0 :(得分:0)
虽然我们现在可以在所需的路径下访问我们的应用程序,但Tomcat仍然会部署该应用程序两次。虽然这对我们来说是一个小麻烦,但我可以想象这在资源紧张的机器上是一个问题。从好的方面来说,我们现在可以开始迁移我们的应用程序,以便在访问API时不再使用资源路径,从而实现更清晰,更短的API URL。
答案 1 :(得分:0)
我知道已经晚了两年。但似乎禁用deployOnStartup将完成工作。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false" deployOnStartup="false">