Php 为什么我永远不能跑';作曲家更新';在生产中?
Php 为什么我永远不能跑';作曲家更新';在生产中?,php,composer-php,Php,Composer Php,composer install将在composer.lock文件中规定的任何时候安装,但是composer update将更新所有依赖项,并根据composer.json中的要求创建一个新的composer.lock文件 所以很多人说只在开发中运行composer update。但我的问题是,是否执行composer update确实替换了旧的composer.lock文件,如果你的应用程序要中断,它将中断,因为可能与新更新的依赖项冲突 我遇到了一种情况,我必须执行composer更新,这个问
composer install
将在composer.lock
文件中规定的任何时候安装,但是composer update
将更新所有依赖项,并根据composer.json
中的要求创建一个新的composer.lock
文件
所以很多人说只在开发中运行composer update
。但我的问题是,是否执行composer update
确实替换了旧的composer.lock
文件,如果你的应用程序要中断,它将中断,因为可能与新更新的依赖项冲突
我遇到了一种情况,我必须执行
composer更新
,这个问题与pcntl
扩展有关。唯一的解决方案是执行composer更新
我不明白为什么人们害怕在制作中运行
composer update
。我的想法是
- 系统的当前工作状态非常重要,因为我假设已经针对它运行了一些测试
- 进行composer更新意味着,作为应用程序一部分的库将有其更新,这可能导致系统中断。因为它们是依赖于依赖于库的库的库
- 最后,如果需要
,我宁愿这样做:编写器更新
- 在开发环境上签出并更新编写器
- 确保应用程序在开发环境中经过彻底测试
- 然后使用
composer安装
安装新软件包composer要求xxx/xxx
更新特定软件包composer update xxx/xxx
- 更新package.lock文件后,在所有环境中安装composer
- 在您的开发机器上执行所有
和要求
调用,这样您就可以在没有风险的情况下测试项目了。这将生成一个更新
,它是整个项目的已知状态,具有离散的安装版本composer.lock
- 创建一个新的可安装版本,执行
。在这一步中,您还应该转储一个优化的自动加载器,在安装脚本后运行,等等。我通常将其分为多个步骤:install--no dev
: ^^这是一个完整的静默安装,不包括开发依赖项composer安装--首选dist--无脚本--无进度--无建议--无交互--无开发
^^转储优化的autcomposer转储自动加载--优化--无开发
- 我的想法如下:
不应在没有参数的情况下使用composer update
composer update
读取composer.json上列出的每个包,并将其更新为与指定版本约束兼容的最新可用版本
在一个完美的世界里,所有的Libraries都会正确地跟随,而且不会有任何副作用。但从技术上讲,这并不总是正确的,你可以下载一个与前一个版本不兼容的版本,或者只是一个有未纠正错误的版本
因此,一次更新所有软件包可能会导致一些问题,除非你有时间检查网站上的所有内容以确保没有出现任何问题
但是,当然,您有时必须更新特定的包,因此使用composer update xxx/xxx
非常有用,前提是您要检查包的所有实现
当更新的软件包经过全面测试后,您可以将代码提交到登台/生产,然后运行composer安装
,以确保在所有平台上都有相同版本的软件包和依赖项
长话短说,以下是我使用的流程:
其他想法 我曾经偶然发现了一个实现,它将在composer.json中给出包的确切版本。开发人员解释说,这样可以使用
composer update
,而不会造成损坏
我不同意这个选项,因为即使使用composer.json中的确切版本,依赖项也不是固定的,而且composer更新可能会导致其中的潜在错误。TLDR;
请勿在生产中运行composer update
或composer install
。在其他地方执行,并将结果上载到生产服务器,但不要上载到承载应用程序的同一目录。作为一般规则,您不应该在服务的同时修改正在服务的应用程序。创建应用程序的另一个副本,当它准备好时,用最接近即时的命令替换它(例如mv
或ln-s
)
但如果必须运行以下任一项:始终运行install
并创建新的安装;并且从不更新<代码>安装更具可预测性和可靠性,有了更新
您就可以任由项目的任何依赖项支配
这位作曲家反复地创作。因此,即使在
composer.json
中有非常严格的版本限制,通过运行composer update
您将不仅更新依赖项,而且更新依赖项的依赖项
虽然在大多数情况下,这不会导致破损,但有时会。一个依赖关系可能会导致行为的改变,这可能会以您没有测试过的方式影响您的代码
而且,它基本上使用了错误的工具。Composer是一个依赖项管理工具,而不是部署工具。要将代码部署到生产环境中,您应该使用某种代码部署工具(即使该“工具”像FTP上传和几个脚本一样简单)
适当的流程是: