为什么composer会删除我对部署的依赖?

时间:2015-07-01 11:06:50

标签: php git deployment composer-php

我遇到了 composer 的问题。 我在本地环境中使用 git 。我是唯一一个开发者。

当我需要更多依赖项(或需要更改某些版本)时,我编辑 composer.json 并在本地运行composer install

一切都很好。

然后,当一切都在本地运行时,我提交我的更改(包括 composer.json composer.lock )并推送到我的生产服务器。

post-receive 脚本更新源并在远程服务器上运行composer install

预期结果:

  • Composer应根据 composer.lock 文件安装新的依赖项。
  • 我应该感到高兴。

会发生什么:

  • 作曲家很生气:
  

警告:锁定文件不是最新的,其中包含最新的更改   composer.json。您可能会过时的依赖项。运行更新到   更新它们。

  • Composer 删除所有依赖项
  • 生产已被破坏
  • 我心脏病发作
  • 我必须通过ssh登录我的服务器并运行composer update以使工作正常,但我知道不建议在生产服务器上使用composer update

以下是 post-receive 作曲家部分的输出:

composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
  - Removing guzzle/guzzle (v3.9.3)
  - Removing symfony/event-dispatcher (v2.7.1)
  - Removing geoip/geoip (v1.15)
  - Removing pimple/pimple (v3.0.0)
  - Removing cocur/slugify (1.1.x-dev)
  - Removing bentools/url (0.2)
  - Removing bentools/simplexmlextended (1.2.0)
Generating autoload files

我做错了什么?

谢谢, 本

2 个答案:

答案 0 :(得分:5)

此警告

  

警告:锁定文件与composer.json中的最新更改不是最新的,您可能会获得过时的依赖项,运行更新以更新它们。

composer.json md5sum composer.lock中存储的 md5sum 不同时,会发生

{
    "hash": "b15ed9405e8547867f74973ce8add172",
    "packages": [ ... ]
}

确保您的composer.jsoncomposer.lock与您的本地用户相同(比较他们的 md5sums )。我怀疑部署链中的某些内容没有正确更新它们。

确保使用require命令在本地添加了依赖项:

composer require new/package ~2.5

或者如果手动编辑composer.json至少运行

composer update new/package

之后为每个额外添加的包确保将其正确添加到composer.lock

另一种方法:
在生产中运行composer update --lock。这将更新锁文件中的哈希值,但不会升级您的供应商。

然后运行composer install以安装comoser.lock

中的供应商

答案 1 :(得分:0)

  

当我需要更多依赖项(或需要更改某些版本)时,我编辑composer.json并在本地运行composer install。

那是错的。您可以编辑composer.json,然后必须运行composer update,或者让Composer对json文件进行内部编辑,然后运行composer require new/package(可选择使用版本)。

无论哪种方式,您都应该使用已更改的composer.jsoncomposer.lock文件,将BOTH提交到您的存储库中,并且预期的结果是锁定文件将包含正确版本中的所有包,应该通过常规composer install运行安装在生产中。

请注意,您的工作流程仍然非常危险。如果你推,并且Github失败了 - 你将如何安装ZIP?