微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

作曲家/Symfony:依赖问题

如何解决作曲家/Symfony:依赖问题

上下文

我目前正在开发一个基于 Symfony 4.4 并部署在 Platform.sh 上的 OroPlatform 项目。

我在部署的构建阶段面临以下问题:

  • 我的应用需要程序包 symfony/process 4.4.X
  • 我不知道为什么,但在 platform.sh 服务器上,我的应用程序使用了为全局安装的 composer 二进制文件安装的 symfony/process 包,但这是一个 5.X 版本
  • 所以,我遇到了一个错误,我无法安装我的应用,因为它使用的是 5.X 版本而不是 4.X
  • 这就是为什么我通过使用 Composer 1.9.3 找到了解决方法,因为它使用 symfony/process 4.4.X,与我的应用使用的相同。

它运行良好,但昨天由于 Github OAuth 令牌更改,我不得不将 Composer 版本升级到最新的 1.X:https://nono.ma/github-oauth-token-for-github-com-contains-invalid-characters-on-composer-install

问题

所以,我在 4.X 版本和 5.X 版本中仍然面临这个问题。

我已经尝试以这种方式安装我的项目的依赖项:composer install -n -o -a错误仍然存​​在。

我正在寻找一种方法来强制我的项目使用位于我的应用程序的 vendor 文件夹中的依赖项,而不是全局安装的依赖项。以下是 platform.sh 服务器上问题的屏幕截图:

enter image description here

这是我的应用程序和 Composer 在 platform.sh 服务器上的路径架构:

/app
|
|__/vendor/symfony-process
|
|__/.global/vendor/symfony-process

我的 composer.json:

{
    "name": "oro/platform-application","description": "Oro Platform Empty Application","homepage": "https://github.com/oroinc/platform-application.git","license": "MIT","autoload": {
        "psr-4": {
            "": "src/"
        },"classmap": [
            "src/AppKernel.PHP","src/AppCache.PHP","vendor/oro/platform/guzzle/Client.PHP"
        ],"exclude-from-classmap": [
            "/vendor/guzzle/guzzle/src/Guzzle/Http/Client.PHP","**/Tests/"
        ]
    },"repositories": {
        "composer": {
            "type": "composer","url": "https://packagist.orocrm.com"
        }
    },"require": {
        "PHP": "~7.3.13 || ~7.4.2","oro/platform": "4.1.*","oro/platform-serialised-fields": "4.1.*","oro/oauth2-server": "4.1.*","doctrine/doctrine-migrations-bundle": "^3.0"
    },"require-dev": {
        "behat/behat": "3.4.*","behat/gherkin": "4.6.0","behat/mink": "dev-master#6d637f7af4816c26ad8a943da2e3f7eef1231bea","behat/mink-extension": "2.3.*","behat/mink-selenium2-driver": "1.3.1","behat/symfony2-extension": "2.1.*","guzzlehttp/guzzle": "^6.0.0","nelmio/alice": "3.6.*","theofidry/alice-data-fixtures": "1.0.*","PHPunit/PHPunit": "7.5.*","johnkary/PHPunit-speedtrap": "3.0.*","mybuilder/PHPunit-accelerator": "dev-master","squizlabs/PHP_codesniffer": "3.5.*","PHPmd/PHPmd": "2.6.*","sebastian/PHPcpd": "4.0.*","PHPunit/PHPcov": "5.0.*","symfony/PHPunit-bridge": "4.4.*","friendsofPHP/PHP-cs-fixer": "2.16.*","oro/twig-inspector": "1.0.*"
    },"config": {
        "component-dir": "public/bundles/components","bin-dir": "bin","fxp-asset": {
            "enabled": false
        }
    },"scripts": {
        "post-install-cmd": [
            "@build-parameters","@set-permissions","@install-assets","@set-assets-version"
        ],"post-update-cmd": [
            "@build-parameters","@update-assets","build-parameters": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters"
        ],"set-permissions": [
            "Oro\\Bundle\\InstallerBundle\\Composer\\ScriptHandler::setPermissions"
        ],"install-assets": [
            "Oro\\Bundle\\InstallerBundle\\Composer\\ScriptHandler::installAssets"
        ],"update-assets": [
            "Oro\\Bundle\\InstallerBundle\\Composer\\ScriptHandler::updateAssets"
        ],"set-assets-version": [
            "Oro\\Bundle\\InstallerBundle\\Composer\\ScriptHandler::setAssetsversion"
        ],"set-parameters": [
            "Oro\\Bundle\\InstallerBundle\\Composer\\ParametersHandler::set"
        ]
    },"minimum-stability": "dev","prefer-stable": true,"extra": {
        "symfony": {
            "require": "4.4.*"
        },"symfony-web-dir": "public","symfony-var-dir": "var","symfony-bin-dir": "bin","symfony-tests-dir": "tests","incenteev-parameters": {
            "file": "config/parameters.yml"
        }
    }
}

解决方法

最后,我认为将 Composer 安装在与 Web 应用程序相同的文件夹下似乎不是一个好习惯。此外,似乎 Platform.sh 不使用 composer 二进制文件。

因此,我更改了 .platform.app.yaml 中的构建阶段,以避免使用 Platform.sh 安装 Composer 的方式并使用自定义方式来执行此操作:

# .platform.app.yaml
hooks:
  build: |
    set -e
    cd $PLATFORM_APP_DIR

    # install Composer
    chmod +x composer-install.sh
    ./composer-install.sh

# composer-install.sh

#!/bin/sh

EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig","php://stdout");')"
php -r "copy('https://getcomposer.org/installer','composer-setup.php');"
ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384','composer-setup.php');")"

if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]
then
    >&2 echo 'ERROR: Invalid installer checksum'
    rm composer-setup.php
    exit 1
fi

php composer-setup.php --1 --quiet
RESULT=$?
rm composer-setup.php
>&1 echo 'Composer successfully installed'
exit $RESULT
,

尝试安装该软件包,以便将其添加到您的 composer.json 文件中。

composer install symfony/process

以下部分将导致安装正确的版本

"extra": {
        "symfony": {
            "require": "4.4.*"
        },

运行命令后,应按如下方式添加包:

"symfony/process": "4.4.*"

如果没有,将其更改为该版本号并运行

composer update symfony/process

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?