Composer 安装在 Laravel 5 时崩溃(仅限生产)

Composer install crashing on Laravel 5 (production only)

从昨天开始我遇到了一个非常奇怪的问题。 运行 composer install 在我的生产服务器上导致此错误...请记住,我在本地服务器(Homestead VM)上没有收到任何错误。

Nothing to install or update
Writing lock file
Generating autoload files
Executing command (CWD): php artisan clear-compiled
Executing command (CWD): php artisan optimize
Generating optimized class loader
Compiling common classes
Script php artisan optimize handling the post-install-cmd event returned with an error



  [RuntimeException]
  Error Output:



Exception trace:
 () at phar:///home/site/public_html/composer.phar/src/Composer/EventDispatcher/EventDispatcher.php:177
 Composer\EventDispatcher\EventDispatcher->doDispatch() at phar:///home/site/public_html/composer.phar/src/Composer/EventDispatcher/EventDispatcher.php:91
 Composer\EventDispatcher\EventDispatcher->dispatchScript() at phar:///home/site/public_html/composer.phar/src/Composer/Installer.php:342
 Composer\Installer->run() at phar:///home/site/public_html/composer.phar/src/Composer/Command/InstallCommand.php:131
 Composer\Command\InstallCommand->execute() at phar:///home/site/public_html/composer.phar/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:257
 Symfony\Component\Console\Command\Command->run() at phar:///home/site/public_html/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:874
 Symfony\Component\Console\Application->doRunCommand() at phar:///home/site/public_html/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:195
 Symfony\Component\Console\Application->doRun() at phar:///home/site/public_html/composer.phar/src/Composer/Console/Application.php:146
 Composer\Console\Application->doRun() at phar:///home/site/public_html/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:126
 Symfony\Component\Console\Application->run() at phar:///home/site/public_html/composer.phar/src/Composer/Console/Application.php:83
 Composer\Console\Application->run() at phar:///home/site/public_html/composer.phar/bin/composer:43
 require() at /home/site/public_html/composer.phar:25


install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-plugins] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [--ignore-platform-reqs] [packages1] ... [packagesN]

所以当 php artisan optimize 设置为 运行 时,错误似乎出现在 post-install-cmd 中......奇怪的是,当我 运行 所有 post-install-cmd 手动,我没有收到任何错误。

所以我尝试了:

  1. 正在做 composer selfupdate
  2. 删除并重新安装作曲家
  3. 使用 composer.phar 而不是全局
  4. 正在composer dumpautoload
  5. 正在删除 composer.lock 文件
  6. 正在删除所有缓存 composer clearcache
  7. 运行宁一composer update,生产中(绝望)

仍然出现同样的错误。你有什么想法 ?我 运行 找不到关键字来在线查找类似问题。

非常感谢

编辑:

也没有提到网站工作正常。浏览时没有错误。

编辑 2:

根据@marcanuy 的建议,我尝试删除供应商目录。同时,我还清除了编译缓存和作曲缓存。作曲家 re-downloaded/installed 一切。仍然得到同样的错误。

编辑 3:

所以我把范围缩小到这个。如果我将 APP_DEBUG 设置为 true,我不会得到错误...当 false 时,我得到错误。知道为什么吗?

最终编辑:

感谢 Ben Johnson 为我指出了正确的方向...我检查了我的原始 PHP 日志,是的,它们与 laravel 日志不同(呃,应该想到的).我在那里看到了一个奇怪的内存错误,与上面错误堆栈中的文件无关:

[02-Jun-2015 14:05:01 Europe/Paris] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 64 bytes) in /vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php on line 169

tada 时刻之后。我提出 memory_limit 和 composer install 运行 没有错误,并且 APP_DEBUG 关闭。

非常感谢大家的帮助。

问题与 php artisan optimize 有关,而不是 composor.phar,如您在 Optimizing the Framework for Better Performance 中看到的那样,如果 APP_DEBUG 为真,您需要使用 --force 选项与命令。因此,要解决此错误,您需要将 "post-install-cmd" 部分中的 composor.json 行从 "php artisan optimize" 更改为 "php artisan optimize --force"

您检查过原始 PHP 日志了吗?

重要的是要注意 Laravel 的日志不包含 PHP 的原始错误日志所包含的所有相同信息。使用 Laravel 时,在发生错误时始终检查原始 PHP 日志,并且可见输出和 Laravel 日志不会揭示根本原因。

同样重要的是要注意 Composer 受其加载和处理的任何 PHP 文件的影响,这意味着 PHP 文件中可能发生的任何类型的错误与 Composer 完全无关的错误能够导致 Composer 失败,而且通常没有任何解释。 然而,根本原因几乎总是在原始 PHP 日志中显而易见。

堆栈跟踪顶部的空方法签名不正常。我怀疑如果你检查原始 PHP 日志,你会发现一些不寻常的情况,这完全解释了 composer.phar.

的突然终止

接下来请检查那里并告诉我们您发现了什么。