2010-05-13 100 views
4

我试图使用python(2.4.2)作为构建过程的一部分将战争部署到Apache Tomcat服务器(构建版本6.0.24)。使用python向tomcat部署战争

我用下面的代码

import urllib2 
import base64 

war_file_contents = open('war_file.war','rb').read() 

username='some_user' 
password='some_pwd' 

base64string = base64.encodestring('%s:%s' % (username, password))[:-1] 
authheader = "Basic %s" % base64string 

opener = urllib2.build_opener(urllib2.HTTPHandler) 
request = urllib2.Request('http://localhost:8080/manager/deploy?path=war_file', data=war_file_contents) 

request.add_header('Content-Type', 'application/octet-stream') 
request.add_header("Authorization", authheader) 

request.get_method = lambda: 'PUT' 
url = opener.open(request) 

的url.code是200和url.msg是 “OK”。但是,Web档案不会出现在经理列表应用程序页面上。

谢谢。

+1

出于好奇,你有没有考虑过使用jython,然后使用Cargo库来管理你的部署到Tomcat(或任何容器,就此而言)。它可能为您节省一些工作:http://cargo.codehaus.org/ – whaley 2010-05-13 12:33:07

+0

有趣的是,它将不得不以jython作为自解压安装程序的一部分运行。这样可以节省很多努力。好的发现,先生! – Decado 2010-05-13 13:57:24

回答

2

好的,算出来了。

的urllib2.Request线需要有一个斜杠的路径,这样的面前: -

request = urllib2.Request('http://localhost:8080/manager/deploy?path=/war_file', data=war_file_contents) 

然后所有工作正常。

+0

随时接受你自己的答案! – 2010-05-13 11:26:19

+0

很想知道,但是得到一个“你可以接受你自己的答案在2天的消息” – Decado 2010-05-13 14:06:09