Laravel 5中Composer安装在生产环境下崩溃

7

自从昨天开始我遇到了一个非常奇怪的问题。在我的生产服务器上运行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]

所以似乎错误出现在post-install-cmd中,当设置php artisan optimize运行时...奇怪的是,当我手动运行所有post-install-cmd时,我没有得到任何错误。
所以我尝试了:
  1. 进行composer selfupdate
  2. 删除composer并重新安装它
  3. 使用composer.phar而不是全局的composer
  4. 执行composer dumpautoload
  5. 删除composer.lock文件
  6. 删除所有缓存composer clearcache
  7. 在生产环境下运行composer update(绝望)
仍然得到相同的错误。你有任何想法吗?我已经用完了关键词,在网上找类似的问题。
谢谢! 编辑: 还没提到网站正常工作..浏览时没有错误。 编辑2: 根据@marcanuy的建议,我尝试删除供应商目录。在此期间,我还清除了编译和composer缓存。Composer重新下载/安装了所有内容。仍然得到相同的错误。 编辑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关闭。非常感谢大家的帮助。

你的 Laravel 安装中的 config/app.php 文件是否包含任何额外的服务提供者或 Facades?这可能是导致错误的原因。 - baao
你是否设置了正确的php可执行文件路径?尝试在composer.json中放置绝对路径/usr/local/bin/php,而不是仅使用php(这只是示例路径,您需要放置您的路径)。另外,请确保您的服务器已安装所有这些扩展。 - Sh1d0w
@shaddy PHP 运行良好。扩展已安装。 - JohnWolf
@JohnWolf,你能否检查Laravel日志(storage/logs)以获取更详细的错误消息? - Sh1d0w
更正。如果我将APP_DEBUG设置为true,我就不会出现错误...当它为false时,我会出现错误。最终改变为本地或生产环境并没有改变任何事情。有什么想法吗? - JohnWolf
显示剩余8条评论
2个回答

2

你是否查看了原始的PHP日志?

需要注意的是,Laravel的日志并不包含与PHP原始错误日志相同的所有信息。当出现错误并且可见输出和Laravel日志未能揭示根本原因时,在使用Laravel时,请始终检查原始的PHP日志。

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

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

请下一步检查,并告诉我们您发现了什么。


0
问题与php artisan optimize有关,而不是composor.phar,如您在优化框架以获得更好性能中所见。如果APP_DEBUG为true,则需要在命令中使用--force选项。因此,要解决此错误,您需要将"post-install-cmd"部分的composor.json行从"php artisan optimize"更改为"php artisan optimize --force"

谢谢Dharmesh...我尝试了这个方法,但是如果我将APP_DEBUG设置为false,仍然会出现错误。如果我将其设置为true,它仍然可以正常工作。脚本php artisan optimize --force处理post-install-cmd事件时返回了一个错误 - JohnWolf
我也尝试设置 --env=production 以防万一...但仍然没有任何反应。 - JohnWolf
还要注意的是,当我手动运行“php artisan optimize”时,它可以正常工作。 - JohnWolf
你能列出你的 composor.json 文件中的脚本部分吗?因为它只与那个有关。 - Dharmesh Patel
我把它添加到问题的末尾。谢谢。 - JohnWolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接