it-swarm.com.ru

Symfony2 post-update-cmd выдает "Ошибка при создании файла начальной загрузки"

Я в настоящее время на 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]

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

}

23
Ronnie Jespersen

Как решить проблему установки/обновления Symfony 2

Одним из важных требований 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 -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX app/cache app/logs
Sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(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

25
Antoine Subit

Я столкнулся с той же проблемой при запуске 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 композитор запустился успешно. 

0
user2048759

В моем случае у меня не было ошибок разрешений. Это было связано с функцией require () для отключенных функций PHP в pnctl-event-loop-emitter library. Автозагрузчик композитора терпел неудачу и сломал скрипт. Решением было включить функции pcntl_ в php.ini .

Файл-нарушитель был vendor/composer /../ gos/pnctl-event-loop-emitter/src/functions.php

; This directive allows you to disable certain functions for security reasons.^M
; It receives a comma-delimited list of function names. This directive is^M
; *NOT* affected by whether Safe Mode is turned On or Off.^M
; http://php.net/disable-functions^M
; disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
disable_functions =
0
Ryan Sundberg

Попробуй почистить кеш с

php app/console cache:clear

а затем попробуйте еще раз

composer update
0
ioses

У меня была та же проблема, и я решил ее в двух частях. Суть проблемы заключалась в плохом коде с моей стороны, который не был бы конкретно применим к кому-то еще, но мой метод раскрытия проблемы мог бы быть полезен для кого-то еще.

Сначала я создал временный файл: 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

Далее в моем Shell я просто побежал:

php app/test.php

После некоторых проб и ошибок я обнаружил, что у меня была ошибка в частном репо, которая была в качестве требования в моем файле composer.json. В моем случае, и у меня был файл начальной загрузки, который вызывал тот самый файл bootstrap.cache.php, который мы пытаемся создать для композитора.

В любом случае, этот метод был полезен, потому что он выводил ошибки, которые не устанавливал/обновлял композитор, даже с включенным параметром --verbose, и временно изменял код для вывода всех ошибок.

0
mattcrowe

Я думаю, удалите папку Bundles в веб-директории "web/bundles" перед запуском обновления. Это должно решить проблемы установки активов в post-update-cmd

0
Safwan Bakais

это также может быть вызвано ошибкой в ​​каком-либо контроллере, если ваш код не понятен, вы не можете обновить композитор. надеюсь, это поможет

0
ADA15

Я столкнулся с той же проблемой, пытаясь использовать Symfony 3 на сервере Bluehost, на виртуальном хостинге. Сначала я должен был найти и использовать клиент php 5.4 для запуска composer, затем я получил ту же ошибку, что и вы . Проверьте документы здесь.

PHP должен быть минимальной версией PHP 5.5.9

Таким образом, вы используете php-клиент, который поддерживает composer, а 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", и все команды post-install-cmd были выполнены без ошибок . Это также способ вызова 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
0
Arleigh Hix

У меня была та же проблема. Даже звонит 

composer create-project symfony/framework-standard-edition path/ "2.3.*"

в пустой директории не удалось.

Ведь я перезагрузился и все снова нормально.

0
BetaRide

Я решил эту проблему, обновив ваш composer.json, чтобы он соответствовал версии php, установленной на вашем компьютере.

"config" : {
    "bin-dir" : "bin",
    "platform" : {
        "php" : "7.0.21" //Update this same as your $> php -v
    }
},
0
Roel B