Phing - развертывание с FTP, но перезаписывать только при изменении размера - PullRequest
5 голосов
/ 11 октября 2011

Я использую Phing и сейчас использую этот код для загрузки своих файлов на FTP:

<target name="ftp.upload">
    <echo>Uploading files to FTP</echo>
    <ftpdeploy 
        host="${ftp.destination.host}"
        port="${ftp.destination.port}"
        username="${ftp.destination.username}"
        password="${ftp.destination.password}"
        dir="${ftp.destination.dir}"
        mode="${ftp.destination.mode}">
       <fileset refid="TheFiles" />
    </ftpdeploy>
    <echo>FTP Upload Finished!</echo>
</target>

Загрузка занимает много времени, и у меня много изображений - поэтому каждый разЯ делаю небольшое изменение текста, я не хочу, чтобы он перезагружал все.Есть ли способ определить, какие файлы были изменены, и только загрузить их?

Спасибо!

Ответы [ 5 ]

8 голосов
/ 10 сентября 2012

Это немного поздно ... но вы МОЖЕТЕ сделать это с Phing.Для этого необходимо выполнить несколько шагов:

Определить свойство даты, с которого нужно выходить.Это будет необходимо в конце, когда вы сохраняете дату последней сборки для будущих сборок

< tstamp>
  < format property="builddate" pattern="%m/%d/%Y"  />
  < format property="buildtime" pattern="%I:%M %p" />
< /tstamp>

Определите свойство lastbuilddate.Определите это к чему-то обратному.Затем включите файл (будет создан в конце выполнения) с тем же свойством.Если файл существует (второй запуск и после), он переопределяет заданную вами настройку с тем, какой была последняя дата:

< property name="lastbuilddate" value="01/01/1970 12:00 AM" />
< property file="$.\lastbuild.properties" override="true"/>

Включить задачу дата в ваш набор файловопределение.Это означает, что нужно выбирать только те файлы, которые имеют дату последнего изменения ПОСЛЕ вашей последней даты сборки

Запустите ftp для набора файлов TheFiles

Обновите файл lastbuild.properties, указав самую последнюю дату запуска.Заметил, что мы используем свойства даты / времени, определенные изначально.

    < echo msg="lastbuilddate=${builddate} ${buildtime}" file="$./lastbuild.properties" append="false" />

Каждый раз, когда вы запускаете свою цель, она будет только ftp-файлами, которые были изменены с даты, указанной в свойстве lastbuilddate

2 голосов
/ 12 октября 2011

Боюсь, что нет способа добиться этого с помощью FTP, если вы не ведете какой-то список измененных файлов. Так что вам лучше использовать rsync. Для звонка уже есть решение: http://blog.fedecarg.com/2008/07/21/filesynctask-using-phing-to-synchronize-files-and-directories/

0 голосов
/ 19 августа 2014

Вы пытались использовать атрибут depends="true" FtpDeployTask ?

Если для параметра установлено значение true, задача будет обновлять только файлы с локальной меткой времени изменения, котораяновее, чем соответствующая временная метка на сервере.

К сожалению, это не работает для меня: все файлы передаются.

0 голосов
/ 02 мая 2014

Вы можете использовать git-ftp или одуванчик , чтобы загрузить только изменения через ftp. Я думаю, это не так сложно использовать один из них с Phing ...

0 голосов
/ 22 августа 2012

Я записал Perl-скрипт, который делает это с SVN-репозиторием. (http://svnftpdeploy.sourceforge.net/ ... Я не знаю, что я написал по-английски)

Требуется локальный каталог для получения файлов из SVN, другой для получения файлов из FTP (изменения, внесенные в следующий выпуск SVN), локальный файл для хранения последнего загруженного релиза SVN, локальный каталог для хранения измененного списка файлов из FTP. И он в интерактивном режиме запрашивает действие в случае конфликта (кто-то изменил файл на сервере независимо от вашего сценария развертывания).

Теперь я переключаюсь на phing и git, труднее всего будет управлять интерактивностью, я думаю, что справлюсь с -D = для целевого развертывания (с -Dconflictaction = stop, viewdiff, viewdiffanddeploy, ignore или что-то подобное). вещь).

...