Composer usa su propia ruta de Symfony en la window acoplable (cargando files antiguos)

  • Estoy usando docker.
  • El command Publicar actualización (class php) se está ejecutando después de la actualización del compositor.
  • Estaba funcionando bien hasta que hice Laravel actualización 5.4-> 5.5 que descargó nuevos packages de Symfony
  • Composer clear cache no ayudó
  • la auto actualización del compositor no ayudó
  • las firmas del compositor son iguales

[Symfony \ Component \ Debug \ Exception \ FatalThrowableError] Llamada al método no definido Illuminate \ Foundation \ Console \ ClosureCommand :: setHidden ()

¡Estaba revisando los files y este método existe en la class para padres! Puse esta pequeña cosa en el constructor que está pasando:

use Symfony\Component\Console\Command\Command 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 } 

Resultado: compositor autocargado, anterior Command.php en lugar de esto del proyecto.

 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" } 

Me gustaría saber por qué la class Symfony no se carga desde el proyecto, sino desde algún lugar mágico y cómo puedo solucionarlo.


Información adicional:

Dockerfile para php que agrega compositor:

 # 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 

Parte del compositor:

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

Tal vez la firma para get compositor no coincida, debe saber que la firma puede cambiar, si desea get la última utilice esta URL https://composer.github.io/installer.sig

Use este fragment para verificar la firma.

 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;" 

Creo que ejecutar el command composer self-update del compositor también actualiza la firma del compositor. También le sugiero que intente lo siguiente si tiene acceso ssh al server:

  • Eliminar composer.lock .
  • Eliminar la carpeta del vendor .
  • Ejecutar la composer install

Esto debería solucionar todos los problemas que mencionaste.

así es como instalo el compositor (Alpine, php7.1-fpm, nginx auto comstackdo)

 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');" 

y trate de cambiar su post-installation a este (laravel 5.5, dockerized y sin problemas)

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