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