如何恢复作曲家更新?

时间:2015-11-12 02:24:32

标签: laravel composer-php

今天我运行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:

我尝试了以下内容:

  1. rm -rf vendor/
  2. composer update
  3. 问题已经消失。

2 个答案:

答案 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

我发现作曲家版本控制语法难以记住自己。