Skip to main content

项目工具

有用的非核心功能,例如组成多个操作的函数。

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

通过rsync将远程目录与当前项目目录同步。

upload_project() 使用 scp 每次调用它时复制整个项目,rsync_project() 使用 rsync 命令行实用程序,它只传输比远程端更新的文件。

rsync_project() 因此是 rsync 周围的简单包装;有关 rsync 如何工作的详细信息,请参阅其手册页。必须在本地和远程系统上安装 rsync 才能使此操作正常工作。

此函数使用Fabric的 local() 操作,并返回该函数调用的输出;因此它将返回结果 rsync 调用的stdout(如果有的话)。

rsync_project() 使用以下参数:

  • remote_dir:唯一必需的参数,这是远程服务器上目录的路径。由于 rsync 如何实现,确切的行为取决于 local_dir 的值:

    • 如果 local_dir 以尾部斜杠结尾,则文件将在 remote_dir 内删除。例如。 rsync_project("/home/username/project/", "foldername/") 将删除 foldername 内部的 /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 来重写,local_dir 是向 rsync 逐字传递的字符串,因此可以是单个目录("my_directory")或多个目录("dir1 dir2")。有关详细信息,请参阅 rsync 文档。

  • exclude:可选,可以是单个字符串或可迭代字符串,用于将一个或多个 --exclude 选项传递给 rsync

  • delete:控制是否使用 rsync--delete 选项的布尔值。如果为True,则指示 rsync 删除本地不再存在的远程文件。默认为False。

  • extra_opts:可选的任意字符串,您可以使用它将自定义参数或选项传递给 rsync

  • ssh_opts:像 extra_opts,但专门用于SSH选项字符串(rsync的 --rsh 标志)。

  • capture:直接发送到内部 local 调用。

  • upload:控制文件同步是向上还是向下执行的布尔值。默认情况下为上行。

  • default_opts:默认的rsync选项 -pthrvz,如果需要覆盖(例如删除冗长等)。

此外,此功能透明地尊重Fabric的端口和SSH密钥设置。当当前主机字符串包含非标准端口时,或当 env.key_filename 非空时,将使用指定的端口和/或SSH密钥文件名调用此函数。

作为参考,由此函数构造的近似 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 的子目录),并且默认为远程用户的主目录。

use_sudo 指定在远程执行命令时应使用哪种方法。如果use_sudo为True,将使用 sudo,否则将使用 run

这个函数使用 targzip 程序/库,因此它不会在Win32系统上工作得很好,除非有人使用Cygwin或类似的东西。即使在发生故障时,它也会尝试清除本地和远程Tarfiles。

在 1.1 版更改: 添加了 local_dirremote_dir kwargs。

在 1.7 版更改: 添加了 use_sudo kwarg。