Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我永远不能跑';作曲家更新';在生产中?_Php_Composer Php - Fatal编程技术网

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 update

      composer update
      读取composer.json上列出的每个包,并将其更新为与指定版本约束兼容的最新可用版本

      在一个完美的世界里,所有的Libraries都会正确地跟随,而且不会有任何副作用。但从技术上讲,这并不总是正确的,你可以下载一个与前一个版本不兼容的版本,或者只是一个有未纠正错误的版本

      因此,一次更新所有软件包可能会导致一些问题,除非你有时间检查网站上的所有内容以确保没有出现任何问题

      但是,当然,您有时必须更新特定的包,因此使用
      composer update xxx/xxx
      非常有用,前提是您要检查包的所有实现

      当更新的软件包经过全面测试后,您可以将代码提交到登台/生产,然后运行
      composer安装
      ,以确保在所有平台上都有相同版本的软件包和依赖项

      长话短说,以下是我使用的流程:

      • composer要求xxx/xxx
        安装新软件包
      • composer update xxx/xxx
        更新特定软件包
      • 更新package.lock文件后,在所有环境中安装composer

      其他想法

      我曾经偶然发现了一个实现,它将在composer.json中给出包的确切版本。开发人员解释说,这样可以使用
      composer update
      ,而不会造成损坏

      我不同意这个选项,因为即使使用composer.json中的确切版本,依赖项也不是固定的,而且composer更新可能会导致其中的潜在错误。

      TLDR; 请勿在生产中运行
      composer update
      composer install
      。在其他地方执行,并将结果上载到生产服务器,但不要上载到承载应用程序的同一目录。作为一般规则,您不应该在服务的同时修改正在服务的应用程序。创建应用程序的另一个副本,当它准备好时,用最接近即时的命令替换它(例如
      mv
      ln-s

      但如果必须运行以下任一项:始终运行
      install
      并创建新的安装;并且从不更新<代码>安装更具可预测性和可靠性,有了
      更新
      您就可以任由项目的任何依赖项支配


      这位作曲家反复地创作。因此,即使在
      composer.json
      中有非常严格的版本限制,通过运行
      composer update
      您将不仅更新依赖项,而且更新依赖项的依赖项

      虽然在大多数情况下,这不会导致破损,但有时会。一个依赖关系可能会导致行为的改变,这可能会以您没有测试过的方式影响您的代码

      而且,它基本上使用了错误的工具。Composer是一个依赖项管理工具,而不是部署工具。要将代码部署到生产环境中,您应该使用某种代码部署工具(即使该“工具”像FTP上传和几个脚本一样简单)

      适当的流程是:

      • 在您的开发机器上执行所有
        要求
        更新
        调用,这样您就可以在没有风险的情况下测试项目了。这将生成一个
        composer.lock
        ,它是整个项目的已知状态,具有离散的安装版本
      • 创建一个新的可安装版本,执行
        install--no dev
        。在这一步中,您还应该转储一个优化的自动加载器,在安装脚本后运行,等等。我通常将其分为多个步骤:
    • composer安装--首选dist--无脚本--无进度--无建议--无交互--无开发

      ^^这是一个完整的静默安装,不包括开发依赖项

    • composer转储自动加载--优化--无开发

      ^^转储优化的aut