当我运行composer require yab/laravel-scout-mysql-driver
时,这是我得到的输出:
Using version ^2.40 for yab/laravel-scout-mysql-driver
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/Cellar/composer/1.3.2/libexec/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/Cellar/composer/1.3.2/libexec/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.
我正在运行Composer 1.9.2。
这是我使用-vvv时输出的最后几行:
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-ircmaxell$password-compat.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-paragonie$constant-time-encoding.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-yab$laravel-scout-mysql-driver.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-symfony$class-loader.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-symfony$polyfill-apcu.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-symfony$polyfill-xml.json from cache
Reading /Users/redacted/.composer/cache/repo/https---repo.packagist.org/provider-gecko-packages$gecko-php-unit.json from cache
PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/Cellar/composer/1.3.2/libexec/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/Cellar/composer/1.3.2/libexec/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.
我的内存限制为128M。 https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors除了增加内存限制外似乎没有提供很多见识,但看起来128M应该足够了吗?
php -d memory_limit=-1 /usr/local/bin/composer require yab/laravel-scout-mysql-driver
没有帮助-我收到“ 已允许用完1610612736字节的内存大小”错误。与memory_limit=1024M
相同。
我做了php --ini
,并从中得到了/usr/local/etc/php/7.1/php.ini
,我对其进行了修改以将内存限制更改为1024MB,并得到了相同的信息:“ 允许的内存大小为1610612736字节已耗尽”。
在每个实例中“允许的内存大小”完全相同是很奇怪的。就像我实际上没有在更改内存大小一样。
有什么想法吗?
答案 0 :(得分:2)
复制Composer Update failed -- out of memory
相同版本(PHP 7.1,Composer 1.9.x)和完全相同(奇怪的)内存限制的问题。
对我来说,每次执行composer require xxx
时composer.lock似乎都损坏了。
要“修复”它,我这样做:
vendor
文件夹(rm -fr vendor
)composer.lock
(rm composer.lock
)composer.json
包含您的新要求(由于先前的composer require
而应包含在其中),否则请添加它。composer install
这时,您将清楚地看到依赖关系问题,或者将安装所有内容。
我成功完成了2次。
答案 1 :(得分:1)
请勿像在生产中催款的项目那样按照先前答案中的建议删除composer.lock。此外,确保它确实存在,这有助于节省大量资源和时间,从而避免通过作曲家重新计算依赖关系,并且锁定库版本使项目行为更可预测。
“ composer.lock”对于任何项目都是必须的,并且其删除有点类似于composer update
。您可能会因为解锁而遇到麻烦,结果是将较新版本的库获取到项目中并进行了重大更改。在大多数情况下,在composer.json中,库版本不是太严格(人们通常将主版本放在库中,最好情况下是次要版本,而几乎从来没有补丁的版本),因此删除大型项目的composer.lock可能导致对于巨大的问题,它并没有真正的帮助,因为composer必须获取所有必需库的所有可能分支和版本,这些都在composer.json中定义,只是为了生成composer.lock。
您使用php -d memory_limit=-1 /usr/local/bin/composer require yab/laravel-scout-mysql-driver
的解决方案是正确的,并且在大多数情况下都可以使用。在我看来,您的可用内存量有限。在这种情况下,您可以尝试执行以下操作之一:
根据我的观察,通常,作曲家需要精确地消耗大部分内存才能重新计算所有依赖项,找出平台的匹配版本,并从远程存储库中获取哈希值,并将所有这些信息放入composer.lock中。生成composer.lock之后,它不需要太多的内存,因此安装非常适合使用非常有限的内存。因此,有时我使用一种变通方法,例如(这非常糟糕,取决于运气,但有时可行):
a。运行composer require
并等待,直到composer.lock中出现新记录,然后终止该进程(以避免还原composer.lock中的记录,这会在安装失败时自动发生)。如果幸运的话,可以在达到内存限制之前对其进行更新。
b。然后只需运行composer install
并最终安装库。
如果所有方法均不起作用,则可以尝试使用适当的哈希在composer.lock中手动添加记录。在这种情况下,您可以避免重新计算所有依赖关系,并在中间跳入安装过程。但这只是一个快速的胜利,以后您将再次遇到相同的问题(下次需要重新计算锁定文件时)。
答案 2 :(得分:0)
我也遇到了确切的q
错误,并通过运行以下命令进行了修复:
1610612736 bytes exhausted
如果这样不起作用,请尝试重命名COMPOSER_MEMORY_LIMIT=-1 php -d memory_limt=-1 $(which composer) install
文件,然后重试。