我正在创建一个用PHP编写的开源项目,并开始使用Travis CI在PHP 5.4、5.5、5.6和HHVM版本上进行测试。
5.5、5.6和HHVM的测试通过了,没有任何问题,但我在PHP 5.4上遇到了一个错误。
此处列出了错误:https://travis-ci.org/CodeRichard/simple-config/jobs/58154496
我注意到它与PHPUnit包有关,我使用PHPUnit包进行本地开发,并使用Composer引入。此版本需要symfony/yaml ~2.1|~3.0
。在谷歌上搜索了一下之后,我发现管道符号被用作OR符号。这一点让我有点困惑。
当我阅读~2.1|~3.0
时,我认为它会尝试拉入一个,如果失败,则拉入另一个。我知道symfony/yaml 3.*需要PHP 5.5.9,而2.*需要5.3.9。
我不明白的是它为什么会失败。它不是应该把symfony/yaml 2.*拉进去吗?
现在,我需要PHPUnit 4.6.*进行开发。PHPUnit的要求是PHP 5.3.3。然而,Composer在尝试Travis CI时失败了。Travis Cl正试图测试PHP 5.4。这完全没有道理。如果它在PHP 5.4上崩溃,而PHPUnit 4.6需要symfony/yaml 3.0,那么要求不应该是5.5吗?
我知道我可以将PHPUnit降级到4.5,但我希望保持最新,所以我宁愿不这样做。
错误消息很简单:Composer无法安装记录在composer.lock
文件中的组件,但不符合THIS PHP:的要求
symfony/yaml 3.0.x-dev requires php >=5.5.9
这将不适用于PHP 5.4。
将你的开发机器降级到5.4并再次运行composer update
将修复它。
在Travis CI中运行composer update
而不是composer install
也会修复它。如果您决定这样做,您还应该使用composer update --prefer-lowest
运行Travis,以测试您声明的最低版本是否正常工作。
您还应该尽量避免"最低稳定性":"dev",除非您真的确定您需要出血边缘包。目前您没有使用其他软件包,因此没有必要处理开发版本不稳定的问题。
删除composer.lock
这就是我.travis.yml
中的内容
# ...
before_script:
- rm composer.lock
- composer install --no-interaction --prefer-source
# ...
问题:#2823