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



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

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.lockconfig/bundles.php,以及其他任何内容,具体取决于composer.jsonrequire-dev中包含的内容。

确切地说,这些都没有中断,但是生产部署不再具有干净的git status输出是很烦人的,并且可能导致对实际部署的内容感到困惑。

对此有多种解决方法,例如,我可以将所有内容都放在require而不是require-dev,因为部署这些东西没有真正的危害,或者我可以省略 Composer 命令的--no-dev部分。

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

在旧的Syfmony Flex 1版本上就是这种情况。

它在这里报告,并在这里修复。

如果这种情况发生在你身上,这意味着你手上有一个非常旧的安装,你应该尽最大努力至少将Symfony Flex更新到更新的版本(Symfony Flex 1甚至不再工作了,所以如果可能的话切换到Flex 2是唯一的方法,或者干脆在生产中删除Flex)。

如果从主分支部署到 prod,则可以改为设置部署分支。在该分支中,您可以阻止某些文件被合并。有关更多详细信息,请参阅此帖子。这会产生这样一种情况:您有一个主分支,一个版本分支(例如:3.21.2),并且您有开发人员签出主服务器,对其进行处理,然后将他们的更改合并到版本分支中。从那里,您可以选择要部署到生产的内容。(这里将有一个小小的平衡行为。您需要将所有开发更改合并到 master 中,直到它与您的版本分支匹配,并确保 master 与部署后的版本匹配。这增加了一些工作,您必须密切关注它。等)

另一种选择是将 git 存储库与部署目录分开。在此示例中,在/var/repo/site.git中创建了一个 git 目录,并/var/www/domain.com部署目录,并且使用接收后 git 挂钩在收到推送到存储库/站点目录后自动更新 www 目录。你显然在 www 目录中运行作曲家、npm、gulp、whathaveyou,而 git 目录保持不变。

无需进入持续部署应用等商业选项,即可编写部署脚本。有很多方法可以编写一个 shell 脚本,该脚本在一个命令中获取一个目录并将其复制、运行 composer、运行 npm 等 - 将 git 与部署目录分开。这是一个简单的方法,它利用当前日期时间来命名目录,然后将其符号链接到部署目录。

相关内容

  • 没有找到相关文章

最新更新