Laravel4のcomposer installでエラーになる場合
laravel4のインストールでは php composer を利用しますが、仮想環境などのパフォーマンスが良くない環境で行うとエラーになることがありました。
$ composer install
Loading composer repositories with package information Installing dependencies (including require-dev)
- Installing symfony/translation (v2.3.2) Downloading: 100% ....
Generating optimized class loader
[Symfony\Component\Process\Exception\RuntimeException]
The process timed-out.
optimize
Script php artisan optimize handling the post-install-cmd event returned with an error
こんな感じで、どうも php artisan optimize の実行でタイムアウトのエラーが出ています。
composer.jsonを見てみると、composer の install、updateで optimize が実行されている模様です。
"scripts": { "post-install-cmd": [ "php artisan optimize" ], "pre-update-cmd": [ "php artisan clear-compiled" ], "post-update-cmd": [ "php artisan optimize" ],
optimize が何をしているのか詳しく把握していませんが、エラーでぐぐっているとこんなissueを発見しました。
PHP Artisan Optimize - Timed out? · Issue #1050 · laravel/framework · GitHub
optimizeで使用している vendor/symfony/process/Symfony/Component/Process/Process.php のプログラムが、実行時間が60秒を超えるとタイムアウトしてしまうみたいです。
__construct で、$timeout = 60 と指定されている部分を、$timeout = 0(無制限) にして、php artisan optimize してみると正常に終了するようになりました。90秒くらいかかっている感じです。
ちょっと困った事になってしまいましたが、optimize は composer.json から実行されているので、composer.json の scripts で、optimizeの前後に timeout の値を置換する処理を入れて暫定的に対応しました。
"scripts": { "post-install-cmd": [ "perl -pi -e 's/timeout = 60/timeout = 0/' vendor/symfony/process/Symfony/Component/Process/Process.php", "php artisan optimize", "perl -pi -e 's/timeout = 0/timeout = 60/' vendor/symfony/process/Symfony/Component/Process/Process.php" ], "pre-update-cmd": [ "php artisan clear-compiled" ], "post-update-cmd": [ "perl -pi -e 's/timeout = 60/timeout = 0/' vendor/symfony/process/Symfony/Component/Process/Process.php", "php artisan optimize", "perl -pi -e 's/timeout = 0/timeout = 60/' vendor/symfony/process/Symfony/Component/Process/Process.php" ], "post-create-project-cmd": [ "php artisan key:generate" ] },