我对作曲家有意见。
我在一个本地环境中与git合作。我是唯一一个开发者。
当我需要更多的依赖项(或者需要更改某些版本)时,我编辑composer.json并在本地运行composer install
一切都很好。
然后,当一切在本地工作时,我提交我的更改(包括composer.json和composer.lock)并推送到我的生产服务器。
接收后脚本更新源并在远程服务器上运行composer install
预期情况:
composer应该根据composer.lock文件安装新的依赖项。
我应该很高兴。
会发生什么:
作曲家很生气:
警告:锁定文件不是最新的
composer.json。您可能会得到过时的依赖项。运行更新到
更新它们。
composer删除所有依赖项。
我的产品坏了。
我心脏病发作了
我必须通过ssh登录到我的服务器并运行composer update以使工作正常,但我知道在生产服务器上不建议使用composer update
以下是post receive composer部分的输出:

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

我做错什么了?
谢谢,

最佳答案

这个警告
警告:锁定文件不是composer.json中最新更改的最新版本,您可能正在获取过时的依赖项,请运行up date来更新它们。
当您的composer.json的md5sum与存储在composer.lock中的md5sum不同时发生:

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

确保composer.jsoncomposer.lock与本地值相同(比较它们的md5和)。我怀疑部署链中的某些内容没有正确更新它们。
确保使用require命令在本地添加了依赖项:
composer require new/package ~2.5

或者如果composer.json是手动编辑的,则至少运行
composer update new/package

之后,为每个额外添加的包确保它正确添加到您的composer.lock中。
另一种方法:
在生产中运行composer update --lock。这将更新锁定文件中的哈希,但不会升级供应商。
然后运行composer install安装comoser.lock中的供应商。

08-26 22:58
查看更多