web-dev-qa-db-fra.com

Symfony2 post-update-cmd donne le message "Une erreur s'est produite lors de la génération du fichier d'amorçage"

Je suis actuellement sur Symfony2 2.3.7 . Lorsque j'exécute la commande composer update. Dans post-update-cmd, un script est exécuté pour mettre à jour symfony2. Mais ça échoue:

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]

Avez-vous une idée de la raison pour laquelle cela se produit?

composer update --no-scripts 

.. et ça fonctionne bien. Ce qui suit fonctionne aussi très bien:

php vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/bin/build_bootstrap.php

Mais chaque fois que j'essaie de mettre à jour le compositeur normal, le post script échoue . L'exécution de la mise à jour avec --verbose donne les résultats suivants:

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 contient:

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

Comment résoudre les problèmes d'installation/de mise à jour de Symfony 2

Une exigence importante de Symfony est que les répertoires app/cache et app/logs doivent être accessibles en écriture à la fois par le serveur Web et par l'utilisateur de la ligne de commande.

Sur les systèmes Linux et macOS, si votre utilisateur de serveur Web est différent de votre utilisateur de ligne de commande, vous devez configurer les autorisations correctement pour éviter les problèmes. Il y a plusieurs façons d'y parvenir:

La solution la plus commune:

Dans un terminal, exécutez les commandes suivantes:

rm -rf bin
rm -rf vendor
composer install
# or if your didn't install composer
php composer.phar install

Cela devrait fonctionner maintenant! Pour plus d'informations, voir Installation de Symfony .

Si vous avez toujours cette erreur: «An error occurred when generating the bootstrap file»
Cela signifie que vous avez un problème d’autorisation de fichier.
Voir la procédure ci-dessous pour résoudre le problème

Configuration ou fixation des autorisations de fichiers:

Dans un terminal, exécutez les commandes suivantes:

rm -rf app/cache/*
rm -rf app/logs/*

Sur les systèmes macOS, la commande chmod prend en charge l'indicateur +a pour définir une liste de contrôle d'accès. Utilisez le script suivant pour déterminer votre utilisateur de serveur Web et accorder les autorisations nécessaires:

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

Sur la plupart des distributions Linux et BSD, ne supporte pas chmod +a, mais supporte un autre utilitaire appelé setfacl. Vous devrez peut-être installer setfacl et activer le support ACL sur votre partition de disque avant de l'utiliser. Ensuite, utilisez le script suivant pour déterminer votre utilisateur de serveur Web et accorder les autorisations nécessaires:

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

Si aucune des méthodes précédentes ne fonctionne pour vous

Modifiez le paramètre umask afin que les répertoires de cache et de journalisation soient inscriptibles par groupe ou inscriptibles par tout le monde (selon que l'utilisateur du serveur Web et l'utilisateur de la ligne de commande appartiennent au même groupe ou non). Pour ce faire, placez la ligne suivante au début des fichiers app/console, web/app.php et web/app_dev.php:

umask(0002); // This will let the permissions be 0775
// or
umask(0000); // This will let the permissions be 0777

Note: La modification de l'umask n'est pas sécurisée pour les threads; les méthodes ACL sont donc recommandées lorsqu'elles sont disponibles.

Pour plus d'informations, voir la documentation officielle: Permissions du fichier Symfony

25
Antoine Subit

Je suis tombé sur le même problème avec composer.phar install avec Symfony3 sous Mac OS (Mavericks) avec MAMP: script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap handling the post-update-cmd event terminated with an exception

Résolu en mettant à jour la version PHP de 5.4 à 5.6. Comme Symfony s’exécute dans MAMP, j’ai oublié que ma version par défaut du système PHP n’est pas prise en charge par Symfony3. Après la mise à niveau de PHP, le composeur s'exécute avec succès. 

0
user2048759

Dans mon cas, je n'ai eu aucune erreur de permissions. Cela concernait une require () pour les fonctions PHP désactivées dans la bibliothèque pnctl-event-loop-emitter. L'autoloader du compositeur échouait difficilement et plantait le script. La solution consistait à activer les fonctions pcntl_ dans php.ini.

Le fichier incriminé était 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

Essayez de nettoyer le cache avec

php app/console cache:clear

et puis réessayez

composer update
0
ioses

J'ai eu le même problème et l'ai résolu en deux parties. Le noeud du problème était un mauvais code de ma part qui ne s'appliquerait pas spécifiquement à quelqu'un d'autre, mais ma méthode pour découvrir le problème pourrait être utile à quelqu'un d'autre.

Tout d'abord, j'ai créé un fichier temporaire: 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';

Vous remarquerez qu'il s'agit d'une version allégée de app/autoload.php

Suivant dans mon shell, j'ai simplement couru:

php app/test.php

Après quelques essais et erreurs, j'ai découvert que j'avais une erreur dans un dépôt privé que j'avais comme exigence dans mon fichier composer.json. Dans mon cas, j'ai eu un fichier de démarrage qui appelait le très bootstrap.cache.php que nous essayons de faire créer compositeur.

Quoi qu'il en soit, cette méthode était utile car elle produisait des erreurs que l’installation/la mise à jour de composer ne serait pas, même avec "--verbose" activé et en modifiant temporairement le code pour afficher toutes les erreurs.

0
mattcrowe

Je pense que supprimer les ensembles de dossiers dans le répertoire Web "web/bundles" avant d'exécuter la mise à jour. Cela devrait résoudre les problèmes d'installation des actifs dans post-update-cmd

0
Safwan Bakais

cela pourrait aussi être causé par une erreur dans un contrôleur. Si votre code n'est pas clair, vous ne pouvez pas mettre à jour le composeur. espérons que cette aide

0
ADA15

J'ai rencontré le même problème en essayant d'utiliser Symfony 3 sur un serveur Bluehost, d'hébergement mutualisé. Je devais d’abord trouver et utiliser le client php 5.4 afin d’obtenir le composeur, puis la même erreur que vous avez eu . Vérifiez la documentation ici.

PHP doit être une version minimale de PHP 5.5.9

Donc, vous utilisez un client php pris en charge par composer, et Symfony ne le fait pas . Bluehost fournit le client php v5.6.24 accessible en /usr/php/56/bin/php.

Donc, en utilisant cet exécutable php:

/usr/php/56/bin/php ~/my/path/to/composer.phar install

J'ai réussi à exécuter "composer install" et tous les éléments post-install-cmd sont terminés sans erreur . C'est également le moyen d'appeler bin/console ou, dans votre cas, les commandes app/console . I.e.

## 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

J'ai eu le même problème. Même appeler 

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

dans un répertoire vide a échoué.

Après tout, j'ai redémarré et tout va bien à nouveau.

0
BetaRide

J'ai résolu cela en mettant à jour votre composer.json pour qu'il corresponde à la version php que vous avez sur votre machine.

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