今天我运行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) Gecko / 20100101 Firefox / 42.0“ [Wed Nov 11 21:01:48 2015] [错误] [客户端127.7.179.129] PHP解析错误:语法错误,意外的'函数'(T_FUNCTION),期望标识符(T_STRING)或\\(T_NS_SEPARATOR)在/ var /第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
,但它提供了以下信息:
使用包信息加载composer存储库 更新依赖项(包括require-dev) 无需安装或更新 写锁文件 生成自动加载文件 PHP解析错误:语法错误,意外的'函数'(T_FUNCTION),期望标识符(T_STRING)或\(/ T_NS_SEPARATOR)/ var / lib / openshift / 55c481747628e14556000188 / app-root / runtime / repo / config / vendor / danielstjules / stringy /tests/CreateTest.php在第5行 脚本php artisan clear-compiled处理返回的post-update-cmd事件,错误
[RuntimeException的] 错误输出:PHP解析错误:语法错误,意外“功能”(T_FUNC TION),期待/ var / lib / o中的标识符(T_STRING)或\(T_NS_SEPARATOR) penshift / 55c481747628e14556000188 / APP-根/运行/回购/配置/供应商/丹尼尔 第5行的lstjules / stringy / tests / CreateTest.php
如何回滚此软件包?感谢。
编辑2:
composer install
会自动修改composer.lock
。我修改了composer.json
,并成功获取了旧版本1.8。
但构建仍然失败。 This issue description有原因。但在我rm -rf test/
之后,问题仍然存在。
编辑3:
我尝试了以下内容:
rm -rf vendor/
composer update
问题已经消失。
答案 0 :(得分:73)
如何还原更新?简单:从更新前使用的版本控制系统中恢复composer.lock
文件。
composer.lock
准确记录了安装的软件。因此,将此文件提交到版本控制中是至关重要的,以便在更新失败时能够返回到工作版本。
正在运行composer install
将始终安装composer.lock
中记录的软件版本,如果此文件不存在,它将仅显示update
。
答案 1 :(得分:5)
如果您选中composer version specification documentation,则~
运营商会根据semantic versioning的原则获取向后兼容的最新版本。这意味着~1.8
相当于>=1.8 <2.0.0
,同样~1.9
与>=1.9 <2.0.0
相同。换句话说,如果最新版本为~1.8
,~1.9
将返回与>=1.9
相同的内容。如果您真的想使用版本1.8
,请执行以下操作:
"danielstjules/stringy": "1.8",
这将获得完全版本1.8
。当然,您之后需要运行composer update
。
我发现作曲家版本控制语法难以记住自己。