我对作曲家有意见。
我在一个本地环境中与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.json
和composer.lock
与本地值相同(比较它们的md5和)。我怀疑部署链中的某些内容没有正确更新它们。确保使用
require
命令在本地添加了依赖项:composer require new/package ~2.5
或者如果
composer.json
是手动编辑的,则至少运行composer update new/package
之后,为每个额外添加的包确保它正确添加到您的
composer.lock
中。另一种方法:
在生产中运行
composer update --lock
。这将更新锁定文件中的哈希,但不会升级供应商。然后运行
composer install
安装comoser.lock
中的供应商。