如何恢复作曲家更新?
Posted
技术标签:
【中文标题】如何恢复作曲家更新?【英文标题】:How to revert back composer update? 【发布时间】:2016-02-13 07:13:56 【问题描述】:今天我跑了composer update
,更新完全破坏了我的网站。我在 php.log 中发现了以下信息:
72.15.153.139 - - [11/Nov/2015:21:01:45 -0500] "GET / HTTP/1.1" 500 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0)壁虎/20100101 火狐/42.0" [2015 年 11 月 11 日星期三 21:01:48] [错误] [客户端 127.7.179.129] PHP 解析错误:语法错误,意外的“函数”(T_FUNCTION),在 /var/ 中需要标识符(T_STRING)或 \\(T_NS_SEPARATOR)第 5 行的 lib/openshift/55c481747628e14556000188/app-root/runtime/repo/config/vendor/danielstjules/stringy/tests/CreateTest.php 72.15.153.139 - - [11/Nov/2015:21:01:48 -0500] "GET / HTTP/1.1" 500 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101火狐/42.0"
似乎“danielstjules/stringy”是罪魁祸首。但是我怎样才能恢复到这个包的旧版本(或使用新闻版本?)?我试图修改composer.lock文件,并改变了
"require":
"danielstjules/stringy": "~1.8",
到
"require":
"danielstjules/stringy": "~1.9",
并再次运行composer update
,但它提供了信息:
使用包信息加载作曲家存储库 更新依赖项(包括 require-dev) 无需安装或更新 写锁文件 生成自动加载文件 PHP 解析错误:语法错误、意外的“函数”(T_FUNCTION)、在 /var/lib/openshift/55c481747628e14556000188/app-root/runtime/repo/config/vendor/danielstjules/stringy 中需要标识符 (T_STRING) 或 \ (T_NS_SEPARATOR) /tests/CreateTest.php 第 5 行 脚本 php artisan clear-compiled 处理 post-update-cmd 事件返回错误
[运行时异常] 错误输出:PHP 解析错误:语法错误,意外的“函数”(T_FUNC TION),在 /var/lib/o 中需要标识符 (T_STRING) 或 \ (T_NS_SEPARATOR) penshift/55c481747628e14556000188/app-root/runtime/repo/config/vendor/danie lstjules/stringy/tests/CreateTest.php 在第 5 行
如何回滚这个包?谢谢。
编辑 2:
composer install
会自动修改composer.lock
。我改为修改composer.json
,它成功获取了旧版本1.8。
但是构建仍然失败。 This issue description 有原因。但是我rm -rf test/
之后,问题依然存在。
编辑 3:
我尝试了以下方法:
rm -rf vendor/
composer update
问题消失了。
【问题讨论】:
你提交你的composer.lock
文件吗?
您的composer.lock
应该在版本控制中。这样您就可以恢复对它的更改,然后执行composer install
以重新安装已知的功能版本。
首先,您应该指定要更新到的确切版本。修改 composer.lock
而不使用 ~
字符。如果仍然损坏,我们必须使用 GIT 或 SVN 绝对恢复到以前的版本。
@VũTuấnAnh 你不应该以任何方式修改composer.lock
。如果您不相信 Composer 会创建(根据版本要求)有效的软件包集,那么谁能做到这一点?如果有要避免的版本,请修改composer.json
以明确排除它们,然后再次运行update
。或者回滚到上一组版本。
@Sven 你是对的。在这种情况下,我应该修改composer.json
。谢谢。
【参考方案1】:
如何恢复更新?简单:从更新前使用的版本控制系统恢复composer.lock
文件。
composer.lock
准确记录了安装了哪些软件。因此,将此文件提交到版本控制中至关重要,以便在更新失败的情况下能够返回到工作版本。
运行composer install
将始终安装composer.lock
中记录的软件版本,如果此文件不存在,它只会像update
一样运行。
【讨论】:
当你感到沮丧时,明显的反应会错过你的头脑 为什么这不是正确的答案?!?! @JohnMccandles 这样的时候,我真的很高兴我一直滚动过去接受的答案。谢谢! 只需还原文件并运行composer install
。成功了!
这应该是十年的答案,拯救了我的一天。
【参考方案2】:
如果选中composer version specification documentation,则~
运算符将获得根据semantic versioning 原则向后兼容的最新版本。这意味着~1.8
等同于>=1.8 <2.0.0
,同样~1.9
等同于>=1.9 <2.0.0
。换句话说,如果最新版本是>=1.9
,~1.8
将返回与~1.9
相同的内容。如果您真的想使用版本1.8
,只需这样做:
"danielstjules/stringy": "1.8",
这将得到确切的版本1.8
。当然你需要在之后运行composer update
。
我发现作曲家版本控制语法很难记住自己。
【讨论】:
以上是关于如何恢复作曲家更新?的主要内容,如果未能解决你的问题,请参考以下文章