2015-10-01 44 views
2

我的應用程序上下文被定義爲位於my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml中的XML文件。如何在使用自定義上下文時使用URL API部署Tomcat應用程序

<Context docBase='/my/path/to/myApp/myAppWarFile.war'> 
    <Environment name='my_config_dir' value='/my/path/to/myApp' type='java.lang.String'/> 
</Context> 

/my/path/to/myApp包含WAR文件myAppWarFile.war和一些外在屬性由春讀取。

Tomcat配置爲關閉autoDeploy。當我啓動Tomcat時,它創建了my/path/to/Tomcat/conf/webapps/my-app/,並且WAR文件按預期方式被解壓到這個位置,當然應用程序可以按預期運行。

當我想在不重新啓動Tomcat的部署一個新的版本,我運行undeploy命令如下:

curl http://localhost:8080/manager/text/undeploy?path=/my-app --user my-username:my-password 

...這工作。但是當我指示Tomcat使用下面的curl語句進行部署時,我得到了一個失敗。

curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml --user my-username:my-password 
# Tomcat response 
FAIL - Invalid context path null was specified 

添加路徑沒有多大幫助,我仍然失敗。

curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml\&path=/my-app --user my-username:my-password 

# Tomcat response 
FAIL - Failed to deploy application at context path /my-app 

最糟糕的是尾巴catalina.out沒有產生任何見解。最重要的是,Tomcat刪除了應用程序上下文XML文件my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml

當然,我已閱讀了Tomcat文檔(https://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Deploy_using_a_Context_configuration_%22.xml%22_file),並且我已經整天搜索了一遍,但我沒有發現任何可以幫助我處理這種特定配置的東西。

這感覺就好像選擇是:

  1. 用的Tomcat上自動部署(不推薦用於生產)在這種情況下,只需放下新戰爭/my/path/to/myApp/將導致Tomcat的熱部署應用程序。
  2. 關閉了autoDeploy的Tomcat,但重新部署需要Tomcat重新啓動,因爲部署API似乎不像廣告中那樣工作。

有沒有人做過這種配置工作?

編輯:

我打開了卡塔利娜登錄。當我不帶路徑運行第一個部署命令,我得到這組日誌條目:

FINE: Start processing with input [config=file:/my/apth/to/tomcat/conf/Catalina/localhost/my-app.xml] 
Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process 
FINE: Socket: [[email protected]:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [OPEN] 
Oct 13, 2015 10:04:53 AM org.apache.coyote.http11.AbstractHttp11Processor process 
FINE: Error parsing HTTP request header 
java.io.EOFException: Unexpected EOF read on the socket 
    at org.apache.coyote.http11.Http11Processor.setRequestLineReadTimeout(Http11Processor.java:168) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:982) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:744) 

Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process 
FINE: Socket: [[email protected]:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [CLOSED] 
Oct 13, 2015 10:04:53 AM org.apache.tomcat.util.threads.LimitLatch countDown 
FINE: Counting down[http-bio-8080-exec-16] latch=1 

回答

1

你試過:

curl --upload-file /my/path/to/my-app.war http://localhost:8080/manager/text/deploy?path=/my-app --user my-username:my-password 
+0

還沒有,但我可以給它一個鏡頭。 my-app.war已經位於tomcat服務器上,由一個可執行的腳本刷新。此外,WAR的路徑和名稱在tomcat應用程序上下文XML文件中定義。出於這個原因,我被引導認爲當我使用deploy命令時,Tomcat的行爲與啓動時的行爲相同。 – Philippe

+0

對不起,沒有運氣。從tomcat的手冊中,「當可選的war參數設置爲Web應用程序的URL」.war「文件或目錄時,它將覆蓋在上下文配置」.xml「文件中配置的任何docBase。」 (https://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#Deploy_using_a_Context_configuration_%22。XML%22_file)。正如我在問題中所述,WAR路徑是在上下文配置XML文件中指定的。 – Philippe

相關問題