我需要在主机上运行composer update,所以我使用ssh登录并尝试运行comand:
composer update
在/ www文件夹中,其中有laravel和composer安装
与我的托管服务提供商联系后,他们告诉我运行命令:
php -d memory_limit=512M composer update
我运行此命令,但得到:“无法打开文件:作曲家”
该怎么办?这里的解决方案是什么?
Answers:
运行时composer update
,操作系统将调查配置的路径并尝试找到具有该名称的可执行文件。
运行时php composer update
,该composer
字符串被视为PHP的参数,不会在任何路径中搜索该字符串。您必须提供完整路径才能运行它。
运行which composer
将告诉您操作系统在哪里可以找到composer可执行文件,然后您只需在PHP命令中使用完整路径即可:
$>which composer
/usr/local/bin/composer
$>php -d memory_limit=512M /usr/local/bin/composer update
...
请注意,512MB可能太少了。我的看法是,根据使用的依赖项数量和理论上允许的版本的多样性,它会很高兴地占用1GB或更多的空间,即,如果允许使用Symfony ~2.3
,那么与使用相比,使Composer处理更多可能的版本~2.7
。
另请注意,在生产计算机上运行Composer并非最佳选择。您将必须具有访问Github的权限,可能需要提供访问凭据,必须安装VCS工具,并且如果在更新过程中有任何远程托管服务器处于脱机状态,则很容易破坏站点。最好在完成所有准备工作的部署系统上使用Composer,然后将所有文件移动到生产服务器上。
更新资料
现在是2020年,Composer管理内存的方式已经发生了很大变化。最重要的是,如果Composer遇到的限制设置过低,它将自行增加内存限制。但是,这立即引发了内存不足的计算机上内存不足的问题。您可以通过将环境变量设置为来使Composer使用更少的内存COMPOSER_MEMORY_LIMIT=512M
,但是如果Composer需要更多的内存来正确操作,这会造成问题。
我的主要观点仍然是正确的:不要在安装了太多内存的计算机上运行Composer。您可能需要1.5 GB的可用内存才能更新所有内容。
php -d memory_limit=-1 $(which composer) update
由于无需指定作曲者路径,因此使用起来更加方便。
php -d memory_limit=-1 $(which composer).phar update
将其设置为使用所需的内存:
COMPOSER_MEMORY_LIMIT=-1 composer update
COMPOSER_MEMORY_LIMIT=-1; export COMPOSER_MEMORY_LIMIT
。还是将其定义为Shell别名? alias memcomposer='COMPOSER_MEMORY_LIMIT=-1 composer'
,然后使用memcomposer
代替composer
Fatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 4096 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
我遇到了composer的问题,因为它消耗了所有可用的内存,然后进程被杀死(实际上,输出消息为“ Killed”)
因此,我一直在寻找一种限制作曲家内存使用量的解决方案。
我试过了(来自@Sven答案)
$ php -d memory_limit=512M /usr/local/bin/composer update
但这没有用,因为
“ Composer内部将memory_limit增加到1.5G。”
->从作曲家官方网站上获得。
然后我找到了一个有效的命令:
$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update
尽管在我看来,512mb还不够!
来源:https : //www.agileana.com/blog/composer-memory-limit-troubleshooting/
COMPOSER_MEMORY_LIMIT=-1 composer require <package name>
如果有足够的内存,作曲家将在内部使用它,并且可以毫无问题地运行。无需专门告诉作曲家这样做。
您是否尝试过增加交换内存,因为它对我有用。我将交换内存增加到4096Mb(4GB),现在对我来说一切都很好。
首先使用“ sudo free
”查看可用内存和交换内存。并将swap配置为
对于Debian:
sudo fallocate -l 4G /swapfile
sudo dd if=/dev/zero of=/swapfile bs=4096k count=1048
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
要使其永久添加到/ etc / fstab文件中, /swapfile swap swap defaults 0 0
对于CentOS:
[root@myserver]:/# cd /var
[root@myserver]:/var# touch swap.img
[root@myserver]:/var# chmod 600 swap.img
[root@myserver]:/var# mkswap /var/swap.img
[root@myserver]:/var# dd if=/dev/zero of=/var/swap.img bs=4096k count=1000
[root@myserver]:/var# mkswap /var/swap.img
[root@myserver]:/var# swapon /var/swap.img
您可以通过更改bs = 1024k或2048k或8096k来增加交换内存,具体取决于您的物理卷大小。使用“ swapon”和swapoff命令查看区别。
检查“ swappiness”(60应该很好,)
cat /proc/sys/vm/swappiness
您可以memory_limit
在php.ini中更改值
尝试增加php.ini文件中的限制
使用-1表示无限制,或定义一个明确的值,例如2G
memory_limit = -1
注意:Composer在内部将memory_limit增加到1.5G。
阅读文档getcomposer.org
在MAC OS High Siera上,我运行了以下命令:
MacBook-Pro:asiu jack$ php --ini
回到:
Configuration File (php.ini) Path: /usr/local/etc/php/7.4
Loaded Configuration File: /usr/local/etc/php/7.4/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d
Additional .ini files parsed: /usr/local/etc/php/7.4/conf.d/ext-
opcache.ini,
/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini
上面的所有答案都设置了确实更新的已加载配置,但请注意,解析的其他.ini文件具有php-memory-limits.ini作为单独的文件。您还必须更新此文件的内存限制。以同样的方式在文本编辑器中打开并更改为2G之类的格式。内存限制失败的输出将告诉您需要运行多少内存,只需将其设置为大于该值或将-1设置为无限即可。
尤其是在更新大型库或具有很多依赖性的库时,可能会发生此错误。作曲家可能会非常消耗内存。
确保您的作曲家本身已更新为最新版本:
php composer.phar --self-update
您可以通过添加composer内存限制环境变量来临时增加composer的内存限制:
COMPOSER_MEMORY_LIMIT=128MB php composer.phar update
对于兆字节,请使用格式“ 128M”,对于千兆字节,请使用“ 2G”格式。您可以使用值“ -1”完全忽略内存限制。
另一种方法是增加PHP内存限制:
php -d memory_limit=512M composer.phar update ...
您的AWS服务器有多大?如果只有ram的1gb,则在php.ini中设置2gb的内存限制将无济于事。
如果您不能/也不想增加服务器端以获取更多可用的RAM,则也可以启用SWAP。
有关如何启用交换的信息,请参见此处。它启用了4GB,尽管我自己通常只做1GB。
资料来源:从laracast网站获得
我在Widnows 10上制作了此文件,并与我合作:
php -d memory_limit=-1 C:/ProgramData/ComposerSetup/bin/composer.phar update
您可以更改所需的xx值
memory_limit=XX
我在Homestead上运行Laravel 6,也遇到了这个问题。如在其他答案中此处建议的那样,您可以COMPOSER_MEMORY_LIMIT=-1
在单个命令前添加前缀并正常运行该命令。如果您想更新PHP配置以始终允许无限的内存,请按照以下步骤操作。
vagrant up
vagrant ssh
php --version # 7.4
php --ini # Shows path to the php.ini file that's loaded
cd /etc/php/7.4/cli # your PHP version. Each PHP version has a folder
sudo vi php.ini
添加memory_limit=-1
到您的php.ini文件。如果您在使用Vim或对php.ini文件进行编辑时遇到问题,请查看以下有关如何使用Vim编辑php.ini文件的答案。该文件应如下所示:
; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit = -1
请注意,这可能会耗尽计算机上的无限内存。生产哈哈可能不是一个好主意。使用Laravel Valet必须遵循本文并在此处更新内存值:
sudo vi /usr/local/etc/php/7.4/conf.d/php-memory-limits.ini
然后使用Valet重新启动服务器:
valet restart
这个答案对于在Mac上使用Laravel Valet更改配置也很有帮助,这样更改才能生效。
<C:\>set COMPOSER_MEMORY_LIMIT=-1
<C:\>composer install exhausted/packages
就我而言,它需要更高的权限以及内存限制的增加。
sudo COMPOSER_MEMORY_LIMIT=2G php /opt/bitnami/php/bin/composer.phar update
sudo
不是一个好主意,因为它将混淆您的权限。看来您正在composer update
服务器上运行-这也是一种不好的做法,因为将计算出的依赖项置于版本控制之下会大为不同
composer install
就足够了。就您而言,在使用共享主机时,我认为您将无法使用composer update
,因此唯一的方法是购买VPS主机,例如Digital Ocean,Linode。