项目工具

其它非核心有用功能,例如:组合多个业务。

fabric.contrib.project.rsync_project(*args, **kwargs)

使用 rsync 讲远程路径和本地项目同步。

upload_project() 使用 scp 来复制整个项目,rsync_project() 会使用 rsync 命令,只会将本地比远程更新的文件同步过去。

rsync_project() 只是一个简单的 rsync 封装,关于 rsync 是如何工作的,请阅读它自身的使用手册。为了保证工作正常,你需要保证本地和远程系统中都已安装 rsync

这个函数会调用 Fabric local() 操作,并将其操作的输出返回回来;也就是说会返回 stdout,如果有的话,还会包含因而产生的 rsync 调用结果。

rsync_project() 接受以下参数:

  • remote_dir:是唯一必选的参数,指的需要同步的远程服务器目录。根据 rsync 实现方式其具体行为取决于 local_dir 的值。

    • If local_dir ends with a trailing slash, the files will be dropped inside of remote_dir. E.g. rsync_project("/home/username/project/", "foldername/") will drop the contents of foldername inside of /home/username/project.
    • 如果 local_dir **没有**以斜线结尾(或者是没有指定 local_dir 的默认情况下),将会以 remote_dir 为父文目录创建一个名为 local_dir 的子目录。也就是说 rsync_project("/home/username", "foldername") 会在创建一个 /home/username/foldername 目录,并将所有文件置于其中。

  • local_dir:默认情况下, rsync_project 使用当前工作目录作为源目录,你可以使用字符串参数 local_dir 覆盖该设置。该参数会原封不动地传递给 rsync,因此它的值可以是单个目录("my_directory"),或者多个目录("dir1 dir2")。详细用法请参阅 rsync 的文档。

  • exclude:可选,可以是一个字符串,也可以是一个字符串的迭代器,用于向 rsync 传递一个或多个 --exclude 参数。

  • delete:用于设置 rsync--delete 选项的参数。其值为 True 将会在远程删除本地已不存在的文件。默认值为 False。

  • extra_opts:可选参数,直接将可选参数传送给 rsync

  • ssh_opts:类似于 extra_opts,但是仅限于 SSH 连接(rsync --rsh 参数)。

  • capture:直接传给 local 内部调用。

  • upload:一个布尔值,用于控制文件同步设置是作为上游还是下游,默认是上游。

  • default_opts:默认 rsync 参数是 -pthrvz,你可以传递参数覆盖默认值(例如:你可以删除 verbosity 输出选项,等等)。

该函数遵循 Fabric 的端口和 SSH key 设置,如果当前主机的使用了非默认端口,或者 env.key_filename 变量非空时,将使用指定端口和/或 SSH key 文件。

作为参考,这个函数构建出的 rsync 调用命令类似于下面这个:

rsync [--delete] [--exclude exclude[0][, --exclude[1][, ...]]] \
    [default_opts] [extra_opts] <local_dir> <host_string>:<remote_dir>

1.4.0 新版功能: 关键字参数 ssh_opts

1.4.1 新版功能: 关键字参数 capture

1.8.0 新版功能: 关键字参数 default_opts

fabric.contrib.project.upload_project(local_dir=None, remote_dir='', use_sudo=False)

使用 tar/gzip 将当前项目上传到远程系统中。

local_dir 参数用于指定将要上传的本地项目路径,默认为当前工作目录。

remote_dir 用于指定要上传的目标目录(也就是说会复制一份 local_dir 目录作为 remote_dir 的子目录),其默认值是用户的 home 目录。

远程执行命令时可以设置 use_sudo 参数。use_sudo 为 True 的时候,将使用 sudo 执行程序,否则使用 run

这个函数会调用 targzip 程序/库,因此在 Win32 系统上并没有得到很好的支持,除非使用了 Cygwin 之类的程序。该函数不论是非执行成功,都会将远程的 tar 文件清理干净。

在 1.1 版更改: 新增关键字参数 local_dirremote_dir

在 1.7 版更改: 新增关键字参数 use_sudo