Deployment 如何更改symfony部署任务中rsync的顺序

Deployment 如何更改symfony部署任务中rsync的顺序,deployment,symfony1,task,rsync,Deployment,Symfony1,Task,Rsync,我想部署symfony应用程序的一部分,比如说,它就像一个模块 我想先排除所有文件,然后只包括 我的新模块 对于部署,我使用以下symfony任务 php symfony project:deploy production -t 参数-t将所有文件打印到rsync此干运行中包含的输出 config/rsync_exclude.txt的内容只有*,因为我喜欢排除所有内容: * 在config/rsync_include.txt中,我列出了要包含的所有文件和文件夹: config/ confi

我想部署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:使用symfony任务时,如何更改rsync的顺序? symfony任务首先排除而不是包括

解决方案2:?这是不可能的

但是您可以在
lib/task/project/sfProjectDeployTask.class.php
中编辑部署任务

替换此(SF 1.4中的第145至154行):

为此:

  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语句。

这是不可能的

但是您可以在
lib/task/project/sfProjectDeployTask.class.php
中编辑部署任务

替换此(SF 1.4中的第145至154行):

为此:

  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语句。

让我们改变您想要的方式。 您应该只使用排除文件。仅排除已更改但不希望同步的目录


因为不管怎样,如果你使用模块/,应用程序/。。。目录没有更改,您不必将它们放在排除文件中,因为它们在两台服务器上都将保持不变。

让我们更改您想要的方式。 您应该只使用排除文件。仅排除已更改但不希望同步的目录


因为不管怎样,如果你使用模块/,应用程序/。。。目录没有更改,您不必将它们放在排除文件中,因为它们在两台服务器上都将保持不变。

谢谢,我以前这样做过,但实际上我不想碰这个类。回答得好!我不能投票,没有足够的声誉。但我认为,这是因为在框架中更改文件的提议不是正确的方式。我将扩展类sfProjectDeployTask并在此处实现更改的。无论如何,这个想法是正确的,答案也是正确的。谢谢你,我以前做过这个,但实际上我不想碰这个班。回答得好!我不能投票,没有足够的声誉。但我认为,这是因为在框架中更改文件的提议不是正确的方式。我将扩展类sfProjectDeployTask并在此处实现更改的。无论如何,这个想法是正确的,答案也是正确的。