使用Symfony Flex和--no-dev部署到生产环境

时间:2017-12-14 17:54:22

标签: symfony composer-php symfony4 symfony-flex

我有几个大的Symfony项目,并注意到在将所有内容更新到Symfony 4(Flex)后,当我们的部署自动化运行其正常的过程时:

$.ajax({ /** your other stuff, and... */ success : function(data) { if (data == 1) { $('button.on').attr({src : "bulb.png"}) } // and so on } });

我们最终得到(例如)这个:

composer install --no-dev

然后,正如预期的那样,这导致Symfony operations: 2 recipes (72fad9713126cf1479bb25a53d64d744) - Unconfiguring symfony/maker-bundle (>=1.0): From github.com/symfony/recipes:master - Unconfiguring phpunit/phpunit (>=4.7): From github.com/symfony/recipes:master symfony.lock以及其他任何内容的更改,具体取决于config/bundles.phprequire-dev中包含的内容。

这一切都没有,确切地说,但是让生产部署不再具有干净的composer.json输出是令人讨厌的,并且可能导致对实际部署的内容产生混淆。

对此有各种解决方法,例如我可以将所有内容放在git status而不是require中,因为在部署这些内容时没有真正的危害,或者我可以省略{{1} Composer命令的一部分。

但实际上,这里的正确做法是什么?如果您只是部署一个锁定的软件,就没有办法告诉Flex不对配置进行任何更改,这似乎很奇怪。这是一个功能请求,还是我在这里错过了一些配置?

1 个答案:

答案 0 :(得分:0)

如果从主分支部署到prod,则可以设置部署分支。在该分支中,您可以阻止某些文件合并。See this post for more detail。这会创建一种情况,在这种情况下,您拥有一个主分支,一个版本分支(例如:3.21.2),并且您正在使用devs checkout master,对其进行处理,然后将其更改合并到版本分支中。从那里你挑选并选择被部署到prod的东西。 (这里会有一个小的平衡行为。你需要将所有dev更改合并到master中,直到它与你的版本分支匹配,并确保master在你部署后匹配版本。这增加了一些工作,你必须留意它等。)

另一种选择是将您的git存储库与部署目录分开。 In this example,在/var/repo/site.git中创建了一个git目录,部署目录为/var/www/domain.com,并且在收到repo后,使用post-receive git hook自动更新www目录/ site目录。你显然在www目录中运行了composer,npm,gulp,whathaveyou,而git目录保持原样。

如果不进入持续部署应用等商业选项,您可以编写部署脚本。有很多方法可以编写一个shell脚本,它接受一个目录并将其复制,运行composer,运行npm等等所有命令 - 将git与deploy目录分开。这是一个simple one,它利用当前的日期时间命名目录,然后将其符号链接到部署目录。