Как изменить порядок rsync в задаче развертывания Symfony - PullRequest
2 голосов
/ 17 августа 2011

Я хочу развернуть часть моего приложения Symfony, скажем, это похоже на модуль.

Я хочу сначала исключить все файлы, а затем включить только файлы мой новый модуль.

Для развертывания я использую следующую задачу Symfony

 php symfony project:deploy production -t

Параметр -t выводит на выход все файлы, которые включены в этот пробный прогон rsync.

Содержимое config / rsync_exclude.txt имеет значение только *, так как я хочу исключить все:

*

В config / rsync_include.txt я перечисляю все файлы и папки для включения:

config/
config/mysupermodule.yml
lib/model/doctrine/
lib/model/doctrine/MySuperclass.php
lib/model/doctrine/MySuperclassTable.php
lib/
lib/MySuperLibrary/
lib/MySuperLibrary/*

Задача Symfony создает следующую команду rsync:

rsync --dry-run -azC --force --delete --progress --exclude-from=config/rsync_exclude.txt --include-from=config/rsync_include.txt -e "ssh -p22" ./ user@www.server.com:/test_deployment/

Проблема 1. Задача не синхронизирует файлы.

Решение до 1: Изменить порядок: сначала включить, а затем исключить.

Я понял, что если я изменю свою потребность на эту:

Я хочу включить все файлы моего нового модуля и исключить все другой.

Это означает использование следующей команды:

rsync --dry-run -azC --force --delete --progress --include-from=config/rsync_include.txt --exclude-from=config/rsync_exclude.txt -e "ssh -p22" ./ user@www.server.com:/test_deployment/

Rsync работает.

Проблема 2: Как изменить порядок rsync при использовании задачи Symfony? Задача Symfony сначала исключает, чем включает.

Решение 2:?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2011

Давайте изменим то, что вы хотите сделать.Вы должны использовать только исключающий файл.Исключите только каталоги, которые изменились, но вы не хотите синхронизировать.

Потому что в любом случае, если ваши каталоги модулей /, app /, ... не изменились, вам не нужно помещать их в исключающий файл, поскольку они останутся одинаковыми на обоих серверах.

0 голосов
/ 18 августа 2011

НЕ возможно.

Но вы можете изменить задачу развертывания в lib/task/project/sfProjectDeployTask.class.php.

Заменить это (строки от 145 до 154 в SF 1.4):

  if (file_exists($options['rsync-dir'].'/rsync_exclude.txt'))
  {
    $parameters .= sprintf(' --exclude-from=%s/rsync_exclude.txt', $options['rsync-dir']);
  }

  if (file_exists($options['rsync-dir'].'/rsync_include.txt'))
  {
    $parameters .= sprintf(' --include-from=%s/rsync_include.txt', $options['rsync-dir']);
  }

с этим:

  if (file_exists($options['rsync-dir'].'/rsync_include.txt'))
  {
    $parameters .= sprintf(' --include-from=%s/rsync_include.txt', $options['rsync-dir']);
  }

  if (file_exists($options['rsync-dir'].'/rsync_exclude.txt'))
  {
    $parameters .= sprintf(' --exclude-from=%s/rsync_exclude.txt', $options['rsync-dir']);
  }

Вкратце: поменяйте эти два оператора IF.

...