我习惯rsync
将代码从一台服务器部署到另一台服务器。在暂存目录中,我通过放置所有文件(例如 php 脚本)来构建应用程序,就像它们应该出现在远程应用程序服务器上一样(这些文件归我所有)。之后,我使用 rsync(使用 python 部署包装器工具)将新文件结构与远程文件结构同步。
在 Python 中的调用如下所示:
rsync = ['/usr/bin/rsync', '-avP', '--rsync-path="sudo -u www-data -g www-data /usr/bin/rsync"', stage_dir, getpass.getuser() + '@' + server + ':/data/application'] + DEFAULT_RSYNC_ARGS
start = time.time()
logger.debug('Running rsync command: `%s`', ' '.join(rsync))
p = subprocess.Popen(rsync, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
if stdout:
logger.debug(stdout)
if stderr:
logger.error(stderr)
其DEFAULT_RSYNC_ARGS
定义为:
DEFAULT_RSYNC_ARGS = [
'--exclude=**/.svn/lock',
'--exclude=**/mw-config/private',
'--exclude=**/localisationCache',
'--exclude=**/main/mw-config',
'--exclude=**/main/sitemap',
'--exclude=**./services',
'--exclude=**/.git',
'--no-perms',
'--archive',
'--delete-delay',
'--delay-updates',
'--compress',
'--delete',
]
但是,如果我运行该脚本,我会收到以下错误消息:
21:59:51 rsync: -avP--rsync-path="sudo -u www-data -g www-data /usr/bin/rsync": unknown option
rsync error: syntax or usage error (code 1) at main.c(1572) [client=3.1.0]
但是,如果我从日志文件运行命令:
/usr/bin/rsync -aqP --rsync-path='sudo -u www-data -g www-data /usr/bin/rsync' /data/deployment/staging/ user@serverhost:/data/application --exclude=**/.svn/lock --exclude=**/mw-config/private --exclude=**/localisationCache --exclude=**/main/mw-config --exclude=**/main/sitemap --exclude=**./services --exclude=**/.git --no-perms --archive --delete-delay --delay-updates --compress --delete
一切都正常。有人能提示一下,为什么使用 python 时它不能按预期工作吗?