Composer在docker中使用自己的Symfony路径(加载旧文件)


  • 我正在使用docker
  • 更新后命令(php类)在composer更新后运行
  • 一直工作得很好,直到我做了Laravel更新5.4->5.5,下载了新的Symfony软件包
  • composer清除缓存没有帮助
  • composer自我更新没有帮助
  • 作曲家签名相等

[Symfony\Component\Debug\Exception\FatalThrowableError]调用未定义方法照明\基础\控制台\关闭命令::setHidden()

我正在遍历文件,并且这个方法存在于父类中!我把这个小东西放在构造函数中,正在发生什么:

use SymfonyComponentConsoleCommandCommand as SymfonyCommand;
class Command extends SymfonyCommand
{
public function __construct()
{
$r1 = new ReflectionClass($this);
$r2 = new ReflectionClass(SymfonyCommand::class);
var_dump([$r1->getFileName(), $r2->getFileName()]);
}
// rest of class
}

结果:composer自动加载自己的,旧的Command.php,而不是这个来自项目。

array(2) {
[0]=>
string(91) "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/ClosureCommand.php"
[1]=>
string(67) "phar:///usr/bin/composer/vendor/symfony/console/Command/Command.php"
}

我想知道为什么symfony类不是从项目加载的,而是从某个神奇的地方加载的,以及我如何解决这个问题


附加信息:

添加composer:的php Dockerfile

# Composer
ENV PATH "/composer/vendor/bin:$PATH"
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV COMPOSER_VERSION 1.4.2
RUN curl -s -f -L -o /tmp/composer-setup.php https://getcomposer.org/installer
RUN curl -s -f -L -o /tmp/composer-setup.sig https://composer.github.io/installer.sig
RUN php -r " 
$signature_php = hash('SHA384', file_get_contents('/tmp/composer-setup.php')); 
$signature_sig = trim(file_get_contents('/tmp/composer-setup.sig')); 
echo ' SIGNATURE PHP: [' . $signature_php . "]\n"; 
echo ' SIGNATURE SIG: [' . $signature_sig . "]\n"; 
if ($signature_php !== $signature_sig) { 
unlink('/tmp/composer-setup.php'); 
echo 'Integrity check failed, installer is either corrupt or worse.' . PHP_EOL; 
exit(1); 
}"
RUN php /tmp/composer-setup.php --no-ansi --install-dir=/usr/bin cd --filename=composer --version=${COMPOSER_VERSION} 
&& rm /tmp/composer-setup.php 
&& composer --ansi --version --no-interaction

作曲部分:

"post-update-cmd": [
"Modules\Core\Composer\ComposerScripts::postUpdate",
"php artisan vendor:publish --tag=public --force",
"php artisan optimize"
],

也许获取composer的签名不匹配,你必须知道签名可以更改,如果你想获得最后一个,请使用这个urlhttps://composer.github.io/installer.sig

使用此代码段验证签名。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && 
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$(wget -q -O - https://composer.github.io/installer.sig)') { 
echo 'Installer good'; 
} else { 
echo 'Installer corrupt'; die; 
} echo PHP_EOL;"

我认为运行composer self-update命令也会更新composer的签名。此外,如果您可以通过ssh访问服务器,我建议您尝试以下操作:

  • 删除composer.lock
  • 删除vendor文件夹
  • 运行composer install

这应该可以解决您提到的所有问题。

这就是我安装composer(Alpine,php7.1-fpm,自编译nginx)的方法

EXPECTED_COMPOSER_SIGNATURE=$(wget -q -O - https://composer.github.io/installer.sig) && 
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && 
php -r "if (hash_file('SHA384', 'composer-setup.php') === '${EXPECTED_COMPOSER_SIGNATURE}') { echo 'Composer.phar Installer verified'; } else { echo 'Composer.phar Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" && 
php composer-setup.php --install-dir=/usr/bin --filename=composer && 
php -r "unlink('composer-setup.php');"

并尝试将您的后安装更改为此(laravel 5.5,码头化并平稳运行)

"post-update-cmd": [
"Illuminate\Foundation\ComposerScripts::postUpdate",
"php artisan optimize"
.....

相关内容

  • 没有找到相关文章

最新更新