現在Symfony2 2.3.7を使用しています。 composer updateコマンドを実行すると、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
しかし、通常のcomposer=更新を試行するたびに、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"
}
}
}
Symfonyの重要な要件の1つは、app/cache
およびapp/logs
ディレクトリがWebサーバーとコマンドラインユーザーの両方によって書き込み可能である必要があることです。
LinuxおよびmacOSシステムでは、Webサーバーユーザーがコマンドラインユーザーと異なる場合、問題を回避するために権限を適切に構成する必要があります。それを達成するにはいくつかの方法があります。
ターミナルで次のコマンドを実行します。
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を定義します。次のスクリプトを使用して、Webサーバーユーザーを決定し、必要なアクセス許可を付与します。
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サポートを有効にする をインストールする必要がある場合があります。次に、次のスクリプトを使用してWebサーバーユーザーを決定し、必要なアクセス許可を付与します。
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
mask を変更して、キャッシュディレクトリとログディレクトリがグループ書き込み可能またはワールド書き込み可能になるようにします(Webサーバーユーザーとコマンドラインユーザーが同じグループに属しているかどうかによって異なります)。これを実現するには、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 file permissions
MAMPを搭載したMac OS(Mavericks)上のSymfony3でcomposer.phar install
を実行しているときと同じ問題に遭遇しました: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アップグレード、composer=成功して実行。
私の場合、許可エラーはありませんでした。 pnctl-event-loop-emitterライブラリーの無効化されたPHP関数のrequire()に関係していました。 composerオートローダーが激しく失敗し、スクリプトがクラッシュしました。解決策は、php.iniでpcntl_関数を有効にすることでした。
問題のファイルは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 =
でキャッシュをきれいにしてみてください
php app/console cache:clear
そして、もう一度やり直してください
composer update
同じ問題があり、2つの部分で解決しました。問題の核心は、他の誰かには特に当てはまらない私の側の悪いコードでしたが、問題を明らかにする私の方法は他の誰かに役立つかもしれません。
最初に、一時ファイル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を作成しようとしているbootstrap.cache.phpを呼び出すcomposerファイルがありました。
とにかく、このメソッドは、「-verbose」を有効にしてすべてのエラーを出力するようにコードを一時的に変更しても、composer install/updateでは発生しないエラーを出力するため便利でした。
更新を実行する前に、Webディレクトリ「web/bundles」のフォルダーバンドルを削除すると思います。これにより、post-update-cmdのアセットインストールの問題が解決するはずです。
これは、一部のコントローラーのエラーが原因である可能性もあります。コードが明確でない場合、composerを更新できません。
Bluehost、共有ホスティング、サーバーでSymfony 3を使用しようとすると、同じ問題が発生しました。 composer=を実行するには、まずphp 5.4クライアントを見つけて使用する必要がありました。その後、同じエラーが発生しました。 こちらのドキュメントを確認してください。
PHPは、PHP 5.5.9の最小バージョンである必要があります
だから、composerをサポートし、Symfonyはサポートしないphpクライアントを使用しています。Bluehostは、/usr/php/56/bin/php
でアクセス可能なphpクライアントv5.6.24を提供します。
そのため、その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
私はまったく同じ問題を抱えていました。でも電話
composer create-project symfony/framework-standard-edition path/ "2.3.*"
空のディレクトリで失敗しました。
結局私は再起動し、すべてが再び元気です。
Composer.jsonを更新してマシンのphpバージョンに一致させることでこれを解決しました
"config" : {
"bin-dir" : "bin",
"platform" : {
"php" : "7.0.21" //Update this same as your $> php -v
}
},