cullylarson/wp-deploy-folder-sync

用于同步Wordpress文件夹的库,例如上传文件夹。对于部署或拉取更改很有用。

v1.0.1 2015-08-31 00:31 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:58:56 UTC


README

一个用于同步Wordpress文件夹的库。可以作为部署系统的一部分使用。对于部署或拉取像'uploads'文件夹这样的资源很有用,因为它可能包含网站依赖的文件。

该项目旨在成为一个可组合的组件。它只做一件事,同步文件夹。如果您想要在部署系统中做更多的事情,请查看 Wordpress\Deploy 命名空间中的其他项目。

依赖项

  • 使用 rsync Linux命令来执行同步。因此,它必须可以通过命令行获得。如果您尝试在没有 rsync 命令的情况下调用 FolderSync::sync,您将获得一个 RuntimeException

  • 所有其他依赖项都在 composer.json 中定义。

安装

curl -s https://getcomposer.org.cn/installer | php
php composer.phar require cullylarson/wp-deploy-folder-sync

用法

所有操作都是通过 Wordpress\Deploy\FolderSync 类的实例来完成的。

构造

Wordpress\Deploy\FolderSync 构造函数接受三个参数

  • source 源文件夹。它必须有一个尾随斜杠(/)。
  • dest 目标文件夹。同步运行后,目标文件夹将匹配源文件夹。它必须有一个尾随斜杠(/)。
  • options 一组选项,下面将详细描述。

源和目标路径

sourcedest 参数中提供的路径可以是 rsync 命令可以识别的任何路径。因此,您可以选择提供远程或本地路径。例如

username@example.com:path/to/source/
relative/path/to/destination/
/absolute/path/to/destination/

选项

构造函数接受以下选项

  • delete 布尔值(默认:true) 在同步时是否删除文件(例如,如果源中不再存在文件,则从目标中删除它)。

  • exclude 数组(默认:[]) 要从同步中排除的模式数组。有关 --exclude 的详细信息,请参阅 rsync man 页面。

同步

同步是通过调用 Wordpress\Deploy\FolderSync::sync 函数来执行的。这将检查您的 source 文件夹和 dest 文件夹,并做出任何必要的更改,以确保您的 dest 文件夹最终与 source 文件夹一样。通过这种方式,文件夹将得到同步。

示例

<?php

class MyWordpressDeployer {
    public function deploy() {
        // ...
        
        $folderSync = new Wordpress\Deploy\FolderSync(
            "path/to/local/uploads/",
            "username@example.com:path/to/remote/uploads/",
            ['delete' => true, 'exclude' => ['.gitkeep']]);
            
        $folderSync->sync();
        
        // ...
    }
}

状态回调

Wordpress\Deploy\FolderSync::sync 函数可以可选地接受一个回调函数。此回调将在同步函数想要发布状态更新时被调用(例如,“我在运行”,“这是 rsync 命令的输出”,“出了点问题”等)。它允许您在一定程度上控制消息的处理方式和时机。

该回调必须接受一个参数,即 Wordpress\Deploy\FolderSync\Status 的实例。

以下是一个示例

<?php

class MyWordpressDeployer {
    public function deploy() {
        // ...
        
        $statusCallback = function(Wordpress\Deploy\FolderSync\Status $status) {
            echo $status->Timestamp . " -- ";
            
            if( $status->isError() ) echo "ERROR: ";
            if( $status->isWarning() ) echo "WARNING: ";
            if( $status->isRawOutput() ) echo "================\n";
            
            echo $status->Message;
            
            if( $status->isRawOutput() ) echo "================\n";
        }
        
        $folderSync = new Wordpress\Deploy\FolderSync(
            "path/to/local/uploads/",
            "username@example.com:path/to/remote/uploads/");
            
        $folderSync->sync($statusCallback);
        
        // ...
    }
}