我正在写Dockerfile
我的新 PHP 应用程序使用 Symfony 5 和 Flex。
我运行的构建命令之一如下:
RUN composer dump-env prod
它给了我错误:
[Symfony\Component\Console\Exception\CommandNotFoundException]
Command "dump-env" is not defined.
我明白了,因为 dump-env
命令源自 symfony/flex Composer 依赖项,该依赖项位于我的 require-dev
中composer.json
中的部分.
我在Dockerfile
中有另一条指令:RUN composer install --no-dev --no-suggest
这就是我收到此错误的原因 - 我运行 dump-env
没有 symfony/flex
的命令已安装。
要修复它,我可以移动 symfony/flex
来自require-dev
的依赖至require
我的composer.json
部分。
所以问题是:
- 我应该在生产代码库中使用 Symfony Flex 吗?
- 如果没有,我该如何运行
dump-env
提高生产性能的命令? - 如果是,使用它的其他原因是什么? Flex 是否会以某种方式影响应用程序性能?
最佳答案
这是一个好问题,因为“避免无用的包”始终是“避免兼容性问题”的好主意。
我应该在生产代码库中使用 Symfony Flex 吗?
在安装过程中,您使用了flex提供的命令:dump-env
,因此您必须在生产环境中安装它。所以我认为你应该使用它。
flex 的主要问题是它可以改变你的源代码和环境文件。但是,在安装过程中,您不会调用 composer update
,而是调用 composer install
。因此,即使任何 bundle 有新的配方,flex 也不会更新您的源代码。我猜你的 env 文件会在安装过程中更新。所以,让这个包投入生产是没有问题的。您可以将其替换为个人命令。我想这个包已经过测试并且稳定。许多开发人员和维护人员都使用它。所以,我猜它是“防错误的”。你的命令会更稳定吗?我不这么认为,即使你复制源代码,因为你的代码不会总是与 flex 命令同步。
Flex 已集成到 Symfony。我们甚至可以说,flex 是用来集成 symfony 包的。因此不存在不兼容的风险。
如果是,使用它的其他原因是什么? Flex 是否会以某种方式影响应用程序性能? Flex 不会影响应用程序的性能,因为它从未被调用。 “从不”不是一个好术语,它仅在调用 dump-env 命令时使用。
另一个原因:symfony-demo 和 symfony-sculpture 是尊重 Symfony 最佳实践的应用程序。 Symfony 团队决定让 Flex 出现在产品包中,而不是开发包中。
因此,正如 Jakumi 在评论中所说,“我认为没有理由在生产中避免使用这个包”。这是正确的 !此外,我认为有很多理由在生产中使用它。
关于php - 我应该在生产代码库上使用 Symfony Flex 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62089221/