2015-11-12 65 views
6

今天我跑了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] [error] [client 127.7.179.129] PHP Parse error: syntax error, unexpected 'function' (T_FUNCTION), expecting identifier (T_STRING) or \\ (T_NS_SEPARATOR) in /var/lib/openshift/55c481747628e14556000188/app-root/runtime/repo/config/vendor/danielstjules/stringy/tests/CreateTest.php on line 5 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 Firefox/42.0"

似乎“danielstjules /粘性”是难辞其咎的一个。但是我怎样才能恢复到这个软件包的旧版本(或使用新闻版本?)?我试图修改composer.lock文件,并改变

  "require": { 
      "danielstjules/stringy": "~1.8", 

 "require": { 
      "danielstjules/stringy": "~1.9", 

,并再次运行composer update,但它给了信息:

Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Writing lock file Generating autoload files PHP Parse error: syntax error, unexpected 'function' (T_FUNCTION), expecting identifier (T_STRING) or \ (T_NS_SEPARATOR) in /var/lib/openshift/55c481747628e14556000188/app-root/runtime/repo/config/vendor/danielstjules/stringy/tests/CreateTest.php on line 5 Script php artisan clear-compiled handling the post-update-cmd event returned with an error

[RuntimeException] Error Output: PHP Parse error: syntax error, unexpected 'function' (T_FUNC TION), expecting identifier (T_STRING) or \ (T_NS_SEPARATOR) in /var/lib/o penshift/55c481747628e14556000188/app-root/runtime/repo/config/vendor/danie lstjules/stringy/tests/CreateTest.php on line 5

我如何可以回滚该包?谢谢。

编辑2:

composer install将自动修改composer.lock。相反,我修改了composer.json,它成功读取了旧版本1.8。

但构建仍然失败。原因是This issue description。但是在rm -rf test/之后,问题仍然存在。

编辑3:

我试过如下:

  1. rm -rf vendor/
  2. composer update

的问题不见了。

+0

你提交了'composer.lock'文件吗? –

+0

你的'composer.lock'应该在版本控制中。这将允许你恢复对它的更改,然后执行'composer install'来重新安装已知的功能版本。 – ceejayoz

+0

首先,您应该指定要更新的准确版本。修改'composer.lock'而不使用'〜'字符。如果仍然存在问题,我们必须使用GIT或SVN来完全恢复到之前的修订版本。 –

回答

3

如果您检查composer version specification documentation~运营商根据semantic versioning的原则获得向后兼容的最新版本。这意味着~1.8相当于>=1.8 <2.0.0,同样~1.9与相同。换句话说,如果最新版本是>=1.9~1.8将返回相同的东西作为~1.9。如果你真的想使用版本1.8,只是这样做:

"danielstjules/stringy": "1.8", 

这将得到完全版本1.8。之后你需要运行composer update

我发现作曲家版本化语法很棘手以记住我自己。

27

如何恢复更新?简单:从更新之前使用的版本控制系统恢复composer.lock文件。

composer.lock正好记录安装了哪个软件。因此,将该文件提交到版本控制中是非常重要的,以便能够在更新失败的情况下返回到工作版本。

运行composer install将始终安装在composer.lock中记录的软件版本,如果此文件不存在,它将仅起到update的作用。

+2

这显然应该是答案。简单而干净。 –

+0

当你失望时,明显的反应会让你头脑发热 –

+0

为什么这不是正确答案?!?! @JohnMccandles – evilReiko