如何解决作曲家/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 服务器上问题的屏幕截图:
这是我的应用程序和 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 举报,一经查实,本站将立刻删除。