Я сейчас на Symfony2 2.3.7. Когда я запускаю команду обновления композитора. В post-update-cmd запускается скрипт для обновления symfony2. Но это не удается:
Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap handling the post-update-cmd event terminated with an exception [RuntimeException] An error occurred when generating the bootstrap file. update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-plugins] [--no-custom-installers] [--no-scripts] [--no-progress] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [packages1] ... [packagesN]
Любая идея, почему это происходит? Я попытался запустить:
composer update --no-scripts
.. и это нормально работает. Следующее также работает нормально:
php vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/bin/build_bootstrap.php
Но каждый раз, когда я пытаюсь нормальное обновление композитора, сценарий post не работает. Запуск обновления с помощью –verbose дает следующее:
Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap handling the post-update-cmd event terminated with an exception [RuntimeException] An error occurred when generating the bootstrap file. Exception trace: () at C:\xampp\htdocs\forvaltning\vendor\sensio\distribution-bundle\Sensio\Bundle\DistributionBundle\Composer\ScriptHandler.php:203 Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::executeBuildBootstrap() at C:\xampp\htdocs\forvaltning\vendor\sensio\distribution-bundle\Sensio\Bundle\DistributionBundle\Composer\ScriptHandler.php:43 Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/EventDispatcher/EventDispatcher.php:165 Composer\EventDispatcher\EventDispatcher->executeEventPhpScript() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/EventDispatcher/EventDispatcher.php:138 Composer\EventDispatcher\EventDispatcher->doDispatch() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/EventDispatcher/EventDispatcher.php:107 Composer\EventDispatcher\EventDispatcher->dispatchCommandEvent() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Installer.php:289 Composer\Installer->run() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Command/UpdateCommand.php:118 Composer\Command\UpdateCommand->execute() at phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:244 Symfony\Component\Console\Command\Command->run() at phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:897 Symfony\Component\Console\Application->doRunCommand() at phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:191 Symfony\Component\Console\Application->doRun() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Console/Application.php:117 Composer\Console\Application->doRun() at phar://C:/ProgramData/Composer/bin/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:121 Symfony\Component\Console\Application->run() at phar://C:/ProgramData/Composer/bin/composer.phar/src/Composer/Console/Application.php:83 Composer\Console\Application->run() at phar://C:/ProgramData/Composer/bin/composer.phar/bin/composer:43 require() at C:\ProgramData\Composer\bin\composer.phar:15 update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-plugins] [--no-custom-installers] [--no-scripts] [--no-progress] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [packages1] ... [packagesN]
Композитор.json содержит:
{ "name": "symfony/framework-standard-edition", "license": "MIT", "type": "project", "description": "The \"Symfony Standard Edition\" distribution", "autoload": { "psr-0": { "": "src/" } }, "repositories": [ { "type": "package", "package": { "name": "jquery/jquery", "version": "1.9.1", "dist": { "url": "http://code.jquery.com/jquery-1.9.1.js", "type": "file" } } } ], "require": { "php": ">=5.3.3", "symfony/symfony": "2.3.*", "twig/extensions": "1.0.*", "symfony/assetic-bundle": "2.3.*", "symfony/swiftmailer-bundle": "2.3.*", "symfony/monolog-bundle": "2.3.*", "sensio/distribution-bundle": "2.3.*", "sensio/framework-extra-bundle": "2.3.*", "sensio/generator-bundle": "2.3.*", "knplabs/knp-menu": "2.0.*@dev", "leafo/lessphp": "0.4.*@dev", "knplabs/knp-menu-bundle": "2.0.*@dev", "incenteev/composer-parameter-handler": "~2.0", "twbs/bootstrap": "2.3.*", "jquery/jquery": "1.9.*", "FortAwesome/Font-Awesome": "3.2.1", "egeloen/ckeditor-bundle": "2.*" }, "require-dev": { "phpunit/phpunit": "3.7.*" }, "scripts": { "post-install-cmd": [ "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile" ], "post-update-cmd": [ "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile" ] }, "config": { "bin-dir": "bin" }, "minimum-stability": "stable", "extra": { "symfony-app-dir": "app", "symfony-web-dir": "web", "incenteev-parameters": { "file": "app/config/parameters.yml" }, "branch-alias": { "dev-master": "2.3-dev" } }
}
Одним из важных требований Symfony является то, что каталоги app/cache
и app/logs
должны быть доступны для записи как веб-сервером, так и пользователем командной строки.
В системах Linux и macOS, если пользователь вашего веб-сервера отличается от пользователя вашей командной строки, вам необходимо правильно настроить разрешения, чтобы избежать проблем. Существует несколько способов достижения этого:
В терминале выполните следующие команды:
rm -rf bin rm -rf vendor composer install # or if your didn't install composer php composer.phar install
Он должен работать сейчас! Для получения дополнительной информации см. Установку Symfony .
Если у вас все еще есть эта ошибка : « An error occurred when generating the bootstrap file
»
Это означает, что у вас есть проблема с разрешением файла.
См. Ниже процедуру для решения проблемы ↓
В терминале выполните следующие команды:
rm -rf app/cache/* rm -rf app/logs/*
В системах macOS команда chmod
поддерживает флаг +a
для определения ACL. Используйте следующий скрипт, чтобы определить пользователя веб-сервера и предоставить необходимые разрешения:
HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1) sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs sudo chmod +a "$(whoami) allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
В большинстве дистрибутивов Linux и BSD не поддерживают chmod +a
, но поддерживают другую утилиту, называемую setfacl
. Возможно, вам придется установить setfacl
и включить поддержку ACL на вашем диске, прежде чем использовать его. Затем используйте следующий сценарий, чтобы определить пользователя веб-сервера и предоставить необходимые разрешения:
HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1) # if this doesn't work, try adding `-n` option sudo setfacl -dR -mu:"$HTTPDUSER":rwX -mu:$(whoami):rwX app/cache app/logs sudo setfacl -R -mu:"$HTTPDUSER":rwX -mu:$(whoami):rwX app/cache app/logs
Измените umask так, чтобы каталоги кэша и журнала записывались в группы или записывались в мире (в зависимости от того, что пользователь веб-сервера и пользователь командной строки находятся в одной группе или нет). Чтобы достичь этого, поместите следующую строку в начало файлов app/console
, web/app.php
и web/app_dev.php
:
umask(0002); // This will let the permissions be 0775 // or umask(0000); // This will let the permissions be 0777
Примечание . Изменение umask не является потокобезопасным, поэтому рекомендуется использовать методы ACL, когда они доступны.
Для получения дополнительной информации см. Официальную документацию: Разрешения на файлы Symfony
Я думаю, удалите пакеты папок в веб-каталоге «web / bundles» перед запуском обновления. Это должно решить проблемы с установкой активов в post-update-cmd
У меня была такая же проблема и она была решена в двух частях. Суть проблемы заключалась в том, что с моей стороны был плохой код, который не был бы специально применим к кому-то другому, но мой метод для раскрытия проблемы может быть полезен кому-то другому.
Во-первых, я создал временный файл: app / test.php
use Doctrine\Common\Annotations\AnnotationRegistry; use Composer\Autoload\ClassLoader; error_reporting(E_ALL | E_STRICT); ini_set('display_errors', 1); /** * @var ClassLoader $loader */ $loader = require __DIR__.'/../vendor/autoload.php';
Вы заметите, что это уменьшенная версия app / autoload.php
Затем в моей оболочке я просто запускал:
php app/test.php
После некоторых проб и ошибок я обнаружил, что у меня была ошибка в частном репо, которое у меня было как требование в моем файле composer.json. В моем случае, и у меня был загрузочный файл, который вызывал самый bootstrap.cache.php, который мы пытаемся создать композитор.
Во всяком случае, этот метод был полезен, потому что он выводил ошибки, которые не устанавливал / обновлял композитор, даже при включенном «–verbose» и временном изменении кода для вывода всех ошибок.
Попробуйте очистить кеш с помощью
php app/console cache:clear
а затем повторите попытку
composer update
У меня была такая же проблема. Даже вызов
composer create-project symfony/framework-standard-edition path/ "2.3.*"
в пустом каталоге.
В конце концов, я перезагрузился, и все хорошо.
это также может быть вызвано ошибкой в некотором контроллере, если ваш код нечеткий, вы не можете обновить композитор. надеюсь эта помощь
Я столкнулся с той же проблемой, с которой работает программа composer.phar install
с Symfony3 в Mac OS (Mavericks) с помощью MAMP: script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap handling the post-update-cmd event terminated with an exception
.
Решено путем обновления версии PHP с 5.4 до 5.6. Поскольку Symfony работает внутри MAMP, я забыл, что моя системная версия PHP по умолчанию не поддерживается Symfony3. После обновления PHP композитор работает с успехом.
Я столкнулся с той же проблемой, пытаясь использовать Symfony 3 на Bluehost, хостинг, сервер. Сначала мне нужно было найти и использовать клиент php 5.4, чтобы запустить композитор, а затем я получил ту же ошибку, что и вы. Проверьте документы здесь.
PHP должен быть минимальной версией PHP 5.5.9
Таким образом, вы используете php-клиент, который поддерживает композитор, и Symfony этого не делает. Bluehost предоставляет php-клиент v5.6.24, доступный в /usr/php/56/bin/php
.
Итак, используя этот исполняемый файл php:
/usr/php/56/bin/php ~/my/path/to/composer.phar install
Я успешно выполнил « composer install
», и все последующие сборки были завершены без ошибок. Это также способ вызова bin/console
или команд вашего app/console
. т.е.
## Symfony 2 /usr/php/56/bin/php app/console cache:clear -e prod ## Symfony 3 /usr/php/56/bin/php bin/console cache:clear -e prod
Я решил это, обновив ваш composer.json, чтобы соответствовать версии php, которую вы используете на своей машине
"config" : { "bin-dir" : "bin", "platform" : { "php" : "7.0.21" //Update this same as your $> php -v } },
Я тоже видел эту ошибку. В моем случае ошибка прекратилась, когда я отключил расширение APC в php.ini.