composer php在Docker中使用自己的Symfonypath(加载旧文件)
- 我正在使用docker。
- 发布更新命令(php类)在作曲者更新后运行。
- 工作得很好,直到我做了Laravel更新5.4-> 5.5,下载了新的Symfony包
- composer php清除caching没有帮助
- composer php自我更新没有帮助
- composer php签名是平等的
[Symfony \ Component \ Debug \ Exception \ FatalThrowableError]调用未定义的方法Illuminate \ Foundation \ Console \ ClosureCommand :: setHidden()
我正在塞取文件,这个方法存在于父类中! 我把这个小东西放在构造函数里是怎么回事:
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 }
结果:composer php自动加载自己的,旧的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类不是从项目中加载,而是从一些神奇的地方加载,我怎样才能解决这个问题。
附加信息:
Dockerfile为添加composer php的PHP:
# 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
composer php部分:
"post-update-cmd": [ "Modules\\Core\\Composer\\ComposerScripts::postUpdate", "php artisan vendor:publish --tag=public --force", "php artisan optimize" ],
也许签名composer php不匹配,你必须知道签名可以改变,如果你想获得最后一个使用此urlhttps://composer.github.io/installer.sig
使用此片段validation签名。
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 php的签名。 另外我会build议尝试下面,如果你有SSH访问服务器:
- 删除
composer.lock
。 - 删除
vendor
文件夹 - 运行
composer install
这应该解决你提到的所有问题。
这是我如何安装composer php(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,dockerized和平稳运行)
"post-update-cmd": [ "Illuminate\\Foundation\\ComposerScripts::postUpdate", "php artisan optimize" .....
- 在Docker容器中使用git,composer,oh-my-zsh(UID / GID问题)
- Docker项目pipe理子项目通过符号链接
- 在caching错误中执行Docker-Compose结果中的Symfony Composer更新
- composer php不能在容器泊坞内分配内存
- (Docker)如何在WordPress容器中安装独立的Composer容器的依赖关系?
- docker中的composer-playground不能连接到hlf v1
- 如何cachingdocker构build的包pipe理器下载?
- docker工和composer php安装
- 如何禁用CircleCI中默认的作曲者安装?