Source of file RsyncMultiHostPublisher.php
Size: 3,477 Bytes - Last Modified: 2021-12-23T10:34:47+00:00
/var/www/docs.ssmods.com/process/src/code/extensions/RsyncMultiHostPublisher.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | <?php /** * This static publisher can be used to deploy static content to multiple * hosts, by generating the cache files locally and then rsyncing then to * each destination box. This can be used to set up a load-balanced * collection of static servers. * * @package staticpublisher */ class RsyncMultiHostPublisher extends FilesystemPublisher { /** * @config * * Array of rsync targets to publish to. These can either be local * file names, or scp-style targets, in the form "user@server:path" * * @var array */ private static $targets = array(); /** * @config * * @var array */ private static $excluded_folders = array(); /** * Set the targets to publish to. * * If target is an scp-style remote path, no password is accepted - we * assume key-based authentication to be set up on the application server * initiating the publication. * * @deprecated 3.2 Use the "RsyncMultiHostPublisher.targets" config setting instead * * @param $targets An array of targets to publish to. */ public static function set_targets($targets) { Deprecation::notice('3.2', 'Use the "RsyncMultiHostPublisher.targets" config setting instead'); Config::inst()->update('RsyncMultiHostPublisher', 'targets', $targets); } /** * Specify folders to exclude from the rsync * For example, you could exclude assets. * * @deprecated 3.2 Use the "RsyncMultiHostPublisher.excluded_folders" config setting instead */ public static function set_excluded_folders($folders) { Deprecation::notice('3.2', 'Use the "RsyncMultiHostPublisher.excluded_folders" config setting instead'); Config::inst()->update('RsyncMultiHostPublisher', 'excluded_folders', $folders); } public function publishPages($urls) { parent::publishPages($urls); $base = Director::baseFolder(); $framework = FRAMEWORK_DIR; // Get variable that can turn off the rsync component of publication if (isset($_GET['norsync']) && $_GET['norsync']) { return; } $extraArg = ""; $excludedFolders = Config::inst()->get('RsyncMultiHostPublisher', 'excluded_folders'); if ($excludedFolders) { foreach ($excludedFolders as $folder) { $extraArg .= " --exclude " . escapeshellarg($folder); } } $targets = Config::inst()->get('RsyncMultiHostPublisher', 'targets'); foreach ((array)$targets as $target) { // Transfer non-PHP content from everything to the target; that will ensure that we have all the JS/CSS/etc $rsyncOutput = `cd $base; rsync -av -e ssh --exclude /.htaccess --exclude /web.config --exclude '*.php' --exclude '*.svn' --exclude '*.git' --exclude '*~' $extraArg --delete . $target`; // Then transfer "safe" PHP from the cache/ directory $rsyncOutput .= `cd $base; rsync -av -e ssh --exclude '*.svn' --exclude '*~' $extraArg --delete cache $target`; // Transfer framework/static-main.php to the target $rsyncOutput .= `cd $base; rsync -av -e ssh --delete $framework/static-main.php $target/$framework`; if (Config::inst()->get('StaticPublisher', 'echo_progress')) { echo $rsyncOutput; } } } } |