我遇到了 composer 的问题。 我在本地环境中使用 git 。我是唯一一个开发者。
当我需要更多依赖项(或需要更改某些版本)时,我编辑 composer.json 并在本地运行composer install
。
一切都很好。
然后,当一切都在本地运行时,我提交我的更改(包括 composer.json 和 composer.lock )并推送到我的生产服务器。
post-receive 脚本更新源并在远程服务器上运行composer install
。
预期结果:
会发生什么:
警告:锁定文件不是最新的,其中包含最新的更改 composer.json。您可能会过时的依赖项。运行更新到 更新它们。
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
我做错了什么?
谢谢, 本
答案 0 :(得分:5)
此警告
当警告:锁定文件与composer.json中的最新更改不是最新的,您可能会获得过时的依赖项,运行更新以更新它们。
composer.json
的 md5sum 与composer.lock
中存储的 md5sum 不同时,会发生:
{
"hash": "b15ed9405e8547867f74973ce8add172",
"packages": [ ... ]
}
确保您的composer.json
和composer.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.json
和composer.lock
文件,将BOTH提交到您的存储库中,并且预期的结果是锁定文件将包含正确版本中的所有包,应该通过常规composer install
运行安装在生产中。
请注意,您的工作流程仍然非常危险。如果你推,并且Github失败了 - 你将如何安装ZIP?