【问题标题】:Travis CI build fails for PHP 5.4 while trying to run composer尝试运行作曲家时,PHP 5.4 的 Travis CI 构建失败
【发布时间】:2015-04-12 13:20:21
【问题描述】:

我正在创建一个用 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

我注意到它与我用于本地开发并使用 Composer 引入的 PHPUnit 包有关。此版本需要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。但是,当 Travis CI 尝试测试 PHP 5.4 时,Composer 失败。这完全没有意义。如果它会在 PHP 5.4 上崩溃并且 PHPUnit 4.6 需要 symfony/yaml 3.0,那么要求不应该是 5.5 吗?

我知道我可以将 PHPUnit 降级到 4.5,但我希望保持最新,所以我不想这样做。

【问题讨论】:

    标签: composer-php travis-ci


    【解决方案1】:

    该错误消息很简单: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,以测试您声明的最低版本是否正常工作。

    你也应该尽量避免使用“minimum-stability”:“dev”,除非你真的确定你需要最前沿的包。目前您没有使用其他软件包,因此无需处理不稳定的开发版本问题。

    【讨论】:

    • 我本地的php版本是5.5,你是说因为我有那个版本,composer加载Symfony/yaml 3.0?哪个记录在我的锁定文件中,这就是它失败的原因?
    • 另外,最好不要将composer.lock 提交到您的开源库。另一方面在应用项目中具有重要意义。
    • @Sven 谢谢你。 @TomášVotruba 你能详细说明不提交composer.lock 文件吗?
    • @RichardA 我非常同意这一点:stackoverflow.com/a/24247443/1348344
    • @TomášVotruba 我明白了!多谢指教!
    【解决方案2】:

    删除composer.lock

    这就是我的 .travis.yml

    # ...
    
    before_script:
      - rm composer.lock
      - composer install --no-interaction --prefer-source
    
    # ...
    

    问题:#2823

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      相关资源
      最近更新 更多